#include<stdio.h>
/*
直接选择排序 是类似冒泡啊 直接插入排序这一类的
但是他是每次直接选择出最大的和最后一个交换,然后第二次就是倒数第二个。。。以此类推
不需要一直相邻的交换 当然也可以选择小元素放前面
*/
void print(int *a){
int i;
for(i = 0; i < 7;i++){
printf("%d ",a[i]);
}
printf("%d\n",a[i]);
}
int main(){
int i,j,index;
int a[8] = {95, 45, 15, 78, 84, 51, 24, 12};
printf("原序列:");
print(a);
for(i = 0; i < 7;i++){
//每次找索引首先赋值为7-i 也就是未排序部分的最后一个位置
index = 7-i;
for(j = 0;j < 7-i;j++){
if(a[index] < a[j]){
index = j;
//index = j; //最大值所在的索引
//continue;
}
}
if(index != 7-i){ //判断是否需要交换,如果最大值就是相对的最后一个那么就不需要交换
int max = a[index];
a[index] = a[7-i];
a[7-i] = max;
}
printf("第 %d 趟排序:",i+1);
print(a);
}
printf("排序后元素如下:");
print(a);
}
直接选择排序
最新推荐文章于 2024-08-22 17:27:46 发布