将n个实数由大到小排序
点击次数:27 次 发布日期:2008-12-01 12:46:59 作者:源代码网
|
源代码网推荐
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); ) 由小到大排序请读者作类似考虑。 源代码网供稿. |