版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dugudaibo/article/details/79477870
1. 选择排序的原理
选择排序算法就是通过 n-i 次关键字的比较,从n-i+1 个记录中选出关键字最小的记录,并和第 I (1<=i<=n)个记录交换。选择排序与之前的冒泡排序不同,他不是进行一次比较,发现一个小于另一个就互换位置,而是一直比较,知道最小的才进行互换。如下图所示
上面的 i 表示这段过程是在确定第 i 个位置的最小值,而 k 是初始化用来比较的最小值,j 是用来循环比较的下标,我们可以看到对于第 1 个位置(i = 1),4 < 2,所以目前认为 2 是最小值,即使 k =2,然后 j + 1 接着比较
2. 代码
#include <stdio.h>
void SelectSort(int k[], int n)
{
int i, j, min, temp, count1=0, count2=0;
for( i=0; i < n-1; i++ )
{
min = i;
for( j=i+1; j < n; j++ )
{
count1++;
if( k[j] < k[min] )
{
min = j;
}
}
if( min != i )
{
count2++;
temp = k[min];
k[min] = k[i];
k[i] = temp;
}
}
printf("总共进行了%d次比较,进行了%d次移动!", count1, count2);
}
int main()
{
int i, a[10] = {5, 2, 6, 0, 3, 9, 1, 7, 4, 8};
SelectSort(a, 10);
printf("排序后的结果是:");
for( i=0; i < 10; i++ )
{
printf("%d", a[i]);
}
printf("\n\n");
return 0;
}