选择排序
12 13 15 23 20 31 19 26 24
1)算法
首先在未排序序列中找到最小元素,并于该序列的首元素做交换,再从剩余的未排序序列中继续寻找最小元素重复以上过程,直到未排序序列中仅剩一个元素为止。
2)评价
平均时间复杂度O(N^2),稳定,对数据的有序性不敏感。相对冒泡而言,因为交换的次数少,略优于冒泡。
实现要点:
1 由于不知道最小值,那么假设一个值是最小值,那么就假设数组的第一个下表的位置i是最小值min,也即min=i;
2 找到所有数中的最小值,重点是最小值的位置,无需关心值是什么
3 找到最小值之后交换最小值和首元素的位置即可
设计重点:
如果假设的最小值min的位置一直是i,那么位置无需交换,否则交换。
#include<iostream>
#include<cstdlib>
using namespace std;
int getRandom(){
int num=rand()%100;
return num;
}
int* getArray(int *data,int size){
int num;
for(int i=0;i<size;++i){
num=getRandom();
data[i]=num;
// *(data+i)=i;
}
return data;
}
void Print(int *data,int size){
for(int i=0;i<size;++i){
cout<<data[i]<<' ';
}
cout<<endl;
}
void chioceSort(int *data,int size){
for(int i=0;i<size-1;++i){
int min=i;
for(int j=i+1;j<size;++j){
if(data[j]<data[min])
min=j;
}
if(min!=i){
int tmp=data[i];
data[i]=data[min];
data[min]=tmp;
}
}
}
int main(){
int *data;
int size;
cout<<"Pls input the size:";
cin>>size;
srand(time(0));
int* tmp=getArray(data,size);
chioceSort(tmp,size);
Print(tmp,size);
return 0;
}