最新消息:想得多,做的少。一天到晚瞎鸡巴搞。

选择排序

大概数据结构与算法 阿虚 181浏览 0评论

.      选择排序是排序算法中最简单并且很容易理解的一种排序算法

原理:

.      从数组的第一个元素开始依次对数组元素进行索引比较。当发现第一个元素大于索引某一位元素的话那么就将索引的值和第一个元素的值进行交换。然后继续向后索引比较。

.      当数组循环完毕后那么第一位就存储为当前数组中最小的那一位,然后取数组中的第二位元素,并且比较的起始位置从第二位元素开始,而非从头开始。重复依次遍历数组元素进行索引比较。直到整个数组遍历完毕。那么这个数组就会按照规则从小到大的顺序排列。

源码:

bool SelectSort(int *Array, int ArrayLength)
{
    for (int i = 0; i < ArrayLength - 1; i++)
    {
        int min = i;
        for (int j = i + 1; j < ArrayLength; j++) 
        { 
            if (Array[min] > Array[j])
            {
                int tmp = Array[min];
                Array[min] = Array[j];
                Array[j] = tmp;
            }
        }
    }

    return true;
}

int main(int argc, _TCHAR* argv[])
{
    int array[10] = { 5, 7, 1, 0, 6, 3, 4, 2, 9, 8 };

    for (int i = 0; i < 10; i++)
    {
        printf("%d ", array[i]);
    }
    
    puts("");

    SelectSort(array, 10);

    for (int i = 0; i < 10; i++)
    {
        printf("%d ", array[i]);
    }

    puts("");
    return 0;
}

.      上述代码应该是选择排序最优化的写法了吧。外层循环次数减一,当i = ArrayLength – 1时已经可以算是最后一轮比较了。内层从i + 1。因为对数组进行比较永远都是i与i+1进行比较。因为第一次自己与自己做比较是无意义的比较浪费时间。

分析:

.     上述代码很明白对一个数组当数组比较小的时候,效率也还行(当然不是排序中最快的)。但是当数组的ArrayLength越大,那么对排序的时间也会要求的越长。算法的效率就会越低。如果算法需要对时间有要求的话那么就需要自己注意了。并且排序算法不管你的被排序数组是否比较整洁还是非常混乱,他们排序的时间是一样长的。

转载请注明:虚无 » 选择排序

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址