选择排序是这样的一种排序算法,它将序列分成两部分,arr[0...i-1]和arr[i...n-1],其中arr[0...i-1]是已经有序的部分,arr[i...n-1]是还未排好序的部分。它每次寻找无序部分的最小元素,然后将这个最小元素与无序部分的首元素进行交换,最终整个序列都有变得有序。其实现也相对简单,代码如下:
//每次选择最小的放在无序部分的最前面
void select_sort(int arr[], int len)
{
int temp,k;
for (int i = 0; i < len; i++)
{
k = i;//开始时,指向无序部分和第一个位置,这是因为假设这个位置上的关键码是最小的
for (int j = i; j < len - 1; j++)
{
if (arr[j + 1] < arr[k])//总是和最小的元素(k为下标)做比较,因为k为下标的关键码总是最小的
{
k = j + 1;//找到了更小的关键码,k的位置改变
}
}
if (k != i)
{
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
}
程序利用两个for循环来实现,外层循环用来控制循环的次数,内层循环用于找出无序部分最小的元素并与无序部分的首元素进行位置互换,最终实现元素的排序。选择排序的运行时间同样为O(n^2)。也是效率比较低的排序算法。