将N个实数由大到小排序

呵呵,最近几天我有个小发现,那就是老白没有来看过我的博客了,说真的蛮希望他能来的,
他不来有点让我失望,毕竟我也关注他很长一段时间了,当然,不管他来不来,我自己的工作还是得继续下去的嘛中,对不对,这里我将简单对于将n个实数由大到小排序做个介绍吧。
    n个实数用数组a描述。
    本例提供用选择排序方法与冒泡排序方法分别实现n个实数由大到小排序的函数。
    算法一:选择排序。
    选择排序需反复进行求最大值与交换两个数这两种基本操作。
    对a[o]、a[1]、…、a[n一1]由大到小排序:先求所有数的最大值,然后将最大值与a[o]进行交换;再求a[1]~a[n一1]这些数的最大值,然后将最大值与a[1]进行交换;再求a[2]~a[n一1]这些数的最大值,然后将最大值与a[2]进行交换……;最后求a[n一2]与a[n一1]这些数的最大值,然后将最大值与a[n一2]进行交换。如此,经过n一1轮处理完成排序,本文首发中国自学编程网。
    程序如下:
    void sortl(a,n)/*选择排序函数*/
    float a[];
    int n:
    {int k,i,j;/*k最大值下标,i,j循环控制变量*/
    float t;/*中间变量,用于两个数的交换*/
    for(i=0;i<n-1;i++)
    {k=i;/*求最大值下标*/
    for(j=i+1}j<n;j++)
    if(a[j]>a[k])k=j
    t=a[i];a[i]一a[k];a[k]=t;/*进行交换*/
    }
    }
    算法二:冒泡排序。
    冒泡排序需反复进行相邻两个数的比较与交换两个数这两种基本操作。对相邻的两个数进行比较时,如果后面的数大于前面的数,将这两个数进行交换,大的数往前冒。将所有相邻的两个安全阀数比较一遍,称为一轮比较。如果进行一轮比较无交换,本文首发中国自学编程网排序完成。
    有无交换用一标志变量描述,一轮比较用for循环完成,整个排序利用标志变量用条件循环控制。
    程序如下:
    void sort2(a,n)/*冒泡排序函数*/
    float a[];
    int n;
    {int i;/*一轮比较的循环控制变量*/
    int flag;/*标志变量,为1有交换,为0无交换*/
    float t;/*中间变量,用于两个数的交换*/
    do
    {flag=O;/*先假定无交换,已排好序*/
    for(i=O;i<n一2; i++)
    if(a[i+1]>a[i])
    {t=a[i];a[i]=a[i+1];a[i+1]=t;/*进行交换*/
    flag=1;/*有交换,标志变量的值改变为1*/
    }
    }while(flag==1);
    )
    由小到大排序请读者作类似考虑。呵呵,差不多了,如果有不当之处,请朋友们指正啊---
posted on 2012-03-18 13:31 一叶草 阅读(656) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理