选择排序
思想:
还是先来看看选择排序的思想。选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维方式。不过条条大路通罗马,两者的目的是一样的。
选择排序的核心在于选择,即找出每一次记录中的最小值,并记下它下标。
注意终止的条件!!!!
代码:
#include <stdio.h> int SelectSort(int *array, int n) { if (array == NULL || n <= 0) return -1; int i, j; int min;//记录最小值的角标 for (i = 0; i < n-1; i++) //注意这里的终止条件为 i<n-1 { min = i; for (j = i+1; j < n; j++) //注意这里 j 的起始位置 { if (array[j] < array[min]) //注意这里 千万不要写成 array[j] < array[i],不然你找的就不是最小值 { min = j; } } if (i != min) //说明要做交换 { int tmp = array[i]; array[i] = array[min]; array[min] = tmp; } } return 0; } int main() { int i; int array[] = { 1, 5, 8, 9, 3,5}; int len = sizeof(array) / sizeof(int); SelectSort(array, len); for (i = 0; i < len; i++) printf("%d\n", array[i]); getchar(); }
最好的情况交换0次,最差的情况交换n-1次。 时间复杂度为O(n²)。

浙公网安备 33010602011771号