排序三:选择排序

来源:互联网 发布:淘宝鬼脚七 编辑:程序博客网 时间:2024/05/16 01:32

概念

选择排序每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。
选择排序的优化:用两个指针,指向数据头和尾,两头同时遍历,找到最大和最小分别放到头和尾。
代码

//选择排序(普通版)void  SelectSort(int*a, size_t n){    assert(a);    for (size_t j = 0; j < n; ++j)    {        for (size_t i = 0; i < n; i++)        {            if (a[i] < a[i + 1])//每趟选出最小值放在末尾            {                int tmp = a[i];                a[i] = a[i + 1];                a[i + 1] = tmp;            }        }    }}//选择排序(优化版)void SelectSort2(int* a, size_t n){    assert(a);    size_t left = 0;    size_t right = n;    while (left < right)    {        size_t min = left;        size_t max = right;        while( min < n)        {            if (a[min] < a[min + 1])                swap(a[min], a[min + 1]);            ++min;        }        while(max > 0)//错误:不可是>=,因为是size_t类型        {            if (a[max]>a[max - 1])                swap(a[max], a[max - 1]);            --max;        }        left++;        right--;    }}

时间复杂度

O(N^2)

空间复杂度

O(1)

稳定性

不稳定,会改变相同数据的位置

复杂性

简单

原创粉丝点击