数据结构-选择排序

1、选择排序

选择排序就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换之;

选择排序的主要优点与数据移动有关。

如果某个元素位于正确的最终位置上,则它不会被移动。

选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对 n 个元素的表进行排序总共进行至多 n - 1 次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

选择排序的算法步骤如下:

  1. 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置;

  2. 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾;

  3. 以此类推,直到所有元素均排序完毕。

void SelectSort(SqList *L)
{
    int i, j, min,count1,count2;
    count1 = count2 = 0;
    for (i = 1; i < L->length;i++)
    {
        min = i;    //将当前下标定义为最小值下标
        for (j = i + 1; j <= L->length;j++)    //循环之后的数据
        {
            count1++;
            if (L->r[min]>L->r[j])    //如果由小于当前最小值的关键字
                min = j;    //更新最小值
        }
        if (i != min)    //若是我们在上面循环中找到最小值,则min会改变,与i不同,就需要进行交换
        {
            swap(L, i, min);
            count2++;
        }
    }
    printf("loop count:%d,  swap count:%d\n", count1, count2);
}

简单选择排序的性能要略优于冒泡排序

posted @ 2020-03-02 22:46  kkzhang  阅读(254)  评论(0编辑  收藏  举报