30. 排序算法(3):选择排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/dugudaibo/article/details/79477870
今日推荐