选择排序

思想:

还是先来看看选择排序的思想。选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维方式。不过条条大路通罗马,两者的目的是一样的。

 

选择排序的核心在于选择,即找出每一次记录中的最小值,并记下它下标。

 

注意终止的条件!!!!

代码:

#include <stdio.h>

int SelectSort(int *array, int n)
{
    if (array == NULL || n <= 0)
        return -1;
    int i, j;
    int min;//记录最小值的角标
    for (i = 0; i < n-1; i++)  //注意这里的终止条件为 i<n-1
    {
        min = i;
        for (j = i+1; j < n; j++)  //注意这里 j 的起始位置
        {
            if (array[j] < array[min])   //注意这里 千万不要写成  array[j] < array[i],不然你找的就不是最小值
            {
                min = j;
            }
        }
        if (i != min)  //说明要做交换
        {
            int tmp = array[i];
            array[i] = array[min];
            array[min] = tmp;
        }
    }

    return 0;
}

int main()
{
    int i;
    int array[] = { 1, 5, 8, 9, 3,5};
    int len = sizeof(array) / sizeof(int);

    SelectSort(array, len);

    for (i = 0; i < len; i++)
        printf("%d\n", array[i]);
    getchar();
}

最好的情况交换0次,最差的情况交换n-1次。 时间复杂度为O(n²)。

posted @ 2017-03-27 16:21  ren_zhg1992  阅读(141)  评论(0)    收藏  举报