标题C语言排序算法(二)
选择排序------最简单的排序算法
流程图(https://baike.baidu.com/item/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F/9762418?fr=aladdin):
原理:
第一轮:以第一个数作为基准,开始和后面的每一个元素进行比较,得到最小的元素,将最小 的元素放在第一个位置;
第二轮:将第二个数作为基准,开始和后面的每一个元素进行比较,得到最小的元素,将最小 的元素放在第二个位置;
…
依次轮替交换,完成排序过程
总结上述过程:选择排序需要进行两个循环,外循环代表排序多少轮,内循环代表比较了多少次
外循环:n-1轮排序
内循环:n-i 次比较
#include <stdio.h>
#define MAX 9
char buf[MAX] = {3,6,5,9,7,1,8,2,4};
int main(int argc, const char *argv[])
{
int i,j;
for(i=0; i<MAX; i++)
for(j=i+1; j<MAX; j++){ //访问未排序的元素
if(buf[i]>buf[j]) //找到目前的小值
swap(&buf[i],&buf[j]); // 交换位置,排序
}
show(buf);
return 0;
}
总结优化:
比较出小的先不交换数组值,只记录数组下标,最后只需要交换一次即可。