选择排序也是一种简单直观的排序算法。它的工作原理很容易理解:初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
注意选择排序与冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;而选择排序每遍历一次都记住了当前最小(大)元素的位置,最后仅需一次交换操作即可将其放到合适的位置。
#include<iostream>
#include<algorithm>
using namespace std;
void OutNum(int *nNum, size_t len)
{
// 异常处理
if (nNum == NULL)
return;
for (size_t i = 0; i < len; i++)
cout << nNum[i] << ' ';
cout << endl;
}
void SelectionSort(int *nNum,int nSize)
{
if (NULL == nNum)
return;
for (int i = 0; i < nSize; i++) {
// 当前这轮最小数据的位置
int nFlagMin = i;
for (int j = i + 1; j < nSize; j++)
{
// 更新最小下标位置
if (nNum[nFlagMin] > nNum[j])
nFlagMin = j;
}
swap(nNum[nFlagMin],nNum[i]);
}
}
int main()
{
//int nNum[10] = { 1,7,4,5,3,8,6,9,0,2 };
// int nNum[20] = {0,1,2,3,4,5,6,7,8,9,10,-1,-2,-3,-4,-5,-6,-7,-8,-9};
int nNum[20] = { 5,0,-8,2,3,4,7,-7,8,1,10,-2,-3,-4,6,-5,-6,9,-9,-1 };
//SelectionSort(nNum, 10);
SelectionSort(nNum, 20);
//OutNum(nNum, 10);
OutNum(nNum, 20);
return 0;
}