选择排序算法, 一种简单的排序算法
复杂度: O(n^2)
伪代码:
procedure selectSort( A : list of sortable items )
n = length(A)
for i=0 to n-1 inclusive do
min = i
for j = i+1 to n inclusive do
if A[j] < A[min] then
min = j
end if
end for
if min != i then
swap(A[i], A[min])
end if
end for
end procedure
C语言实现:
#include <stdio.h>
#if 1
#include "utility.h"
#else
#define SWAP(a,b) {(a)=(a)^(b); (b)=(a)^(b); (a)=(a)^(b);}
#endif
void select_sort(int arr[], int len)
{
int min;
int i,j;
for (i=0; i<len-1; i++)
{
min = i;
/*find the index of smallest element*/
for (j=i+1; j<len; j++)
if (arr[j]<arr[min])
min = j;
if (min != i)
{
/*printf("swap %d, %d\n", arr[i], arr[min]);*/
SWAP(arr[i],arr[min]);
}
}
}
int main()
{
int arr[] = {5,1,4,2,8,9,7,3,6,17,11};
int len = ARR_SIZE(arr);
printf("list before sort :\n");
print_arr(arr, len);
select_sort(arr, len);
printf("select sort result:\n");
print_arr(arr, len);
return 0;
}
运行输出:
dennis@dennis-VirtualBox:~/project/sort$ gcc -o select select_sort.c
dennis@dennis-VirtualBox:~/project/sort$ ./select
list before sort :
5, 1, 4, 2, 8, 9, 7, 3, 6, 17, 11,
select sort result:
1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 17,
dennis@dennis-VirtualBox:~/project/sort$