有一数组1,2,3,4,5,6,7,8,9,10.需要将次数组从大到小进行排列?
使用选择排序法:
1.先让第一个数1和第二个数2进行比较,大的放在前面,得2,1,3,4,5,6,7,8,9,10.
2.然后让第一个数2与第三个数3进行比较,大的放在前面。即3,1,2,4,5,6,7,8,9,10.
3.再让第一个数与第四个数4进行比较,大的放在前面,得4,1,2,3,5,6,7,8,9,10.
4.以此进行,最后一次一定是10在最前面,即10,1,2,3,4,5,6,8,9.
上面算是一轮。接下来进行第二轮:
1.用第二个数1与剩下八个数进行比较,则第二大的数一定为9.得数组:10,9,1,2,3,4,5,6,7,8.
第三轮就是10,9,8,1,2,3,4,5,6,7.
以此类推。最终的数组为:10,9,8,7,6,5,4,3,2,1.
下面是具体算法:
#include<stdio.h>
#include<stdlib.h>
int main(){
int i,j;
int temp;
int number[] = {1,2,3,4,5,6,7,8,9,10};
int n = sizeof(number)/sizeof(number[0]);
//返回的n值是数组number的最大个数。 40/4 = 10
for (i = 0; i < n-1; i++){
for(j = i + 1; i < n; j++){
if(number[i] < number[j]){ //比较两个数的大小并交换位置。
temp = number[i];
number[i] = number[j];
number[j] = temp;
}
}
}
for (i = 0; i < n; i++){ //交换完了再次利用循环进行打印
printf("%d", number[i]);
}
return 0;
}