简单选择排序

简单选择排序(Simple Selection Sort)是通过n – i次关键字之间的比较,从n – i + 1个记录中选出关键字最小(大)的记录,并和第i(1≤i≤n)个记录交换。

这种排序算法简单直观,首先从未排序序列中找到最小(大)元素,存放到排序序列的起始位置。然后再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。

算法实现及测试:

#include <iostream>
using namespace std;

// 选择排序
void SelectSort(int data[], int count)
{
    int min = 0;
    int auxiliary = 0;

    for (int i = 0; i < count; ++i)
    {
        min = i;

        for (int j = i + 1; j < count; ++j)
        {
            if (data[j] < data[min])
                min = j;
        }

        if (i != min)
        {
            auxiliary = data[i];
            data[i] = data[min];
            data[min] = auxiliary;
        }
    }
}

int main()
{
    int array[] = {9, 6, 3, 8, 7, 1, 5, 2, 4};

    SelectSort(array, 9);

    for(int i = 0; i < 9; ++i)
        cout << array[i] << endl;

    return 0;
}

简单选择排序的比较次数为O(n ^ 2),总的比较次数N = (n-1) + (n-2) + … + 1 = n*(n-1)/2。交换次数为O(n),最好情况是关键字初始有序,交换0次,最坏情况时关键字初始逆序,交换n-1次。简单选择排序的交换次数比冒泡排序少很多,由于交换操作所需的CPU时间比比较操作所需的CPU时间多,所以n值较小时,选择排序要优于冒泡排序。

【学习资料】 《大话数据结构》 《维基百科》

posted on 2012-12-27 17:41  zhuyf87  阅读(2333)  评论(0编辑  收藏  举报

导航