基本思想:在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
算法流程:
1)初始时,数组全为无序区a[0, ... , n-1], 令i=0;
2)在无序区a[i, ... , n-1]中选取一个最小的元素与a[i]交换,交换之后a[0, ... , i]即为有序区;
3)重复2),直到i=n-1,排序完成。
时间复杂度分析:O(n^2),直接选择排序是一种不稳定的排序算法。
void StraightSelectionSort(int a[], int n) { int i, j, minIndex; for (i=0; i<n; i++) { minIndex=i; for (j=i+1; j<n; j++) { if (a[j]<a[minIndex]) { minIndex=j; } int temp = a[j]; a[j] = a[minIndex]; a[minIndex] = temp; } } }