您的位置:首页 > 其它

简单选择排序

2012-12-27 17:41 573 查看
简单选择排序(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值较小时,选择排序要优于冒泡排序。

【学习资料】 《大话数据结构》 《维基百科》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: