004 选择排序
一、算法介绍
选择排序是从未排好序的序列中选出一个最小的元素,然后将其放在已排好序序列的末尾。直到待排序的元素个数为零。第一次序列中排好序的序列是一个空序列,因此将整个序列中最小的元素放在首部。
二、算法分析
每次循环是从待排序序列选择最小元素然后将其放在待排序序列的首位置,因此可以记录当前最小元素的位置(循环开始时以第一个元素为最小),然后向后遍历,与当前最小元素比较,若比当前最小元素小就记录该元素的位置。循环结束时就把记录位置的元素与待排序序列的第一个元素交换位置。因为每次选择最小元素的循环(内部)都要遍历整个待排序序列,所以循环应到序列末尾结束,而排序的循环(外部)是到倒数第二个结束。
如图所示
三、算法代码
void SelectionSort(int a[], int n)
{
int i, j, min, temp;
for(i=0; i<n-1; i++)
{
min = i;
for(j=i+1; j<n; j++)
{
if(a[j] < a[min])
min = j;
}
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
运行结果