C++简单选择排序
给定要排序的一组数中,选出最大(或者最小)的一个数与第一个位置的数进行交换,然后在剩下的数当中再找最大(最小0)的与第二个位置的数进行交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个元素)比较为止。
例如:
开始:1 3 5 7 9 0 2 4 6 8
①0 3 5 7 9 1 2 4 6 8
②0 1 5 7 9 3 2 4 6 8
③0 1 2 7 9 3 5 4 6 8
④0 1 2 3 9 7 5 4 6 8
⑤0 1 2 3 4 7 5 9 6 8
⑥0 1 2 3 4 5 7 9 6 8
⑦0 1 2 3 4 5 6 9 7 8
⑧0 1 2 3 4 5 6 7 9 8
⑨0 1 2 3 4 5 6 7 8 9
操作方法:
第一趟:假定第一个数为最小,第一个数与后面n-1个数进行元素比较,选择最小的记录下标,并与第一个记录进行交换
第二趟:从第二个记录开始的n-1个记录中再选出数最小的记录与第二个记录交换
以此类推...
第i趟,则从第i个记录开始与n-i+1个记录中选出最小数值记录与第i个记录交换
直到整个序列按值大小排序完成。
#include<iostram>
using namespace std;
void print(int a[], int n)
{
for(int j= 0; j<n; j++)
{
cout<<a[j] <<" ";
}
cout<<endl;
}
void selectSort(int a[], int len)
{
int minindex, temp;
for(int i = 0; i<len-1;i++)
{
minindex = i;
for(int j = i+1; j<len; j++)
{
if(a[j]<a[minindex])
minindex = j;
}
temp = a[i];
a[i] = a[minindex];
a[minindex] = temp;
print(a,len);
}
}
int main(int argc, char** argv) {
int x[]={1,3,5,7,9,0,2,4,6,8};
selectSort(x,10);
return 0;
}
最坏时间复杂度:
空间复杂度:![\large O(1)](https://i-blog.csdnimg.cn/blog_migrate/09e0c4c9b1c722774f719fff961c9ce4.gif)
最好时间复杂度:
不稳定
平均时间复杂度:![\large O(n^2)](https://i-blog.csdnimg.cn/blog_migrate/e1dcf97137ee539714a4514c476423dd.gif)