选择排序的思想是每次遍历都会从待排序的数据中选择一个最小或最大值,所以称为选择排序。伪代码如下:
选择排序c代码如下:
完整的c程序如下:
SELECT-SORT
for i <-- 1 to length[A]-1
do k <-- i
for j <-- i+1 to length[A]
do if A[j] < A[k]
then k <-- j
exchange A[k] <--> A[i]
这里主要关心的是为什么只需要n-1次遍历,而不是n次遍历?因为n-1次遍历已经选择出了n-1个极小或极大值,剩下的一个数据自然是极大或极小值。选择排序c代码如下:
void select_sort(int A[], int len)
{
int i, j, k;
for (i = 0; i < len-1; i++) {
k = i;
for (j = i+1; j < len; j++) {
if (A[j] < A[k]) {
k = j;
}
}
if (k != i) {
swap(&A[i], &A[k]);
}
}
}
完整的c程序如下:
#include <stdio.h>
void dump(int a[], int len)
{
int i;
for (i = 0; i < len; i++) {
printf("%3d", a[i]);
}
printf("\n");
}
void swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void select_sort(int A[], int len)
{
int i, j, k;
for (i = 0; i < len-1; i++) {
k = i;
for (j = i+1; j < len; j++) {
if (A[j] < A[k]) {
k = j;
}
}
if (k != i) {
swap(&A[i], &A[k]);
}
}
}
int main(void)
{
int a[] = {3, 1, 0, 4, 6, 2, 9, 8, 7, 5};
int len = sizeof(a) / sizeof(a[0]);
dump(a, len);
select_sort(a, len);
dump(a, len);
return 0;
}