选择排序原理和程序(选择排序的原理)

选择排序的思路是这样的:首先,找到数组中最小的数据,拎出来,将它和数组的第一个数据交换位置,第二步,在剩下的数据中继续寻找最小的数据,拎出来,和数组的第二个数据交换位置,如此循环,直到整个数组排序完成。


我们还是以[8,2,5,9,7]这组数字做例子。

  第一轮选择,先找到数组中最小的数字2,然后和第一个数字交换位置。


第二轮选择,由于数组第一个位置已经是有序的,所以只需要查找剩余位置,找到其中最小的数字5,然后和数组第二个位置的数据交换。

第三轮选择,找到最小值7,和第三个位置的数据交换位置。




  第四轮选择,找到最小值8,和第四个位置的数据交换位置。


  最后一个到达了数组末尾,没有可对比的数据,结束选择。

  如此整个数组就排序完成了。

# include <stdio.h>

int main(void)

{

int i, j; //循环变量

int MinIndex; //保存最小的值的下标

int buf; //互换数据时的临时变量

int a[] = {5, 5, 3, 7, 4, 2, 5, 4, 9, 1, 8, 6};

int n = sizeof(a) / sizeof(a[0]); //存放数组a中元素的个数

for (i=0; i<n-1; ++i) //n个数比较n-1轮

{

MinIndex = i;

for (j=i+1; j<n; ++j) //每轮比较n-1-i次, 找本轮最小数的下标

{

if (a[MinIndex] > a[j])

{

MinIndex = j; //保存小的数的下标

}

}

if (MinIndex != i) /*找到最小数之后如果它的下标不是i则说明它不在最左边, 则互换位置*/

{

buf = a[MinIndex];

a[MinIndex] = a[i];

a[i] = buf;

}

}

printf("最终排序结果为:\n");

for (i=0; i<12; ++i)

{

printf("%d ", a[i]);

}

printf("\n");

return 0;

}

原文链接:,转发请注明来源!