简单选择排序
算法思想:
设待排序的记录存放在数组a[]中,数组长度为n。通过n-1趟排序,将a变成一个有序的数组。
(1)第一趟从a[0]开始,通过n-1次比较,从n-1个关键字中找出最小的记录,记做a[k],将a[0]和a[k]交换。
(2)第二趟从a[1]开始,通过n-2次比较,从n-2个关键字中找出最小的记录,记做a[k],将a[1]和a[k]交换。
(3)第i趟从a[i-1]开始,通过n-i+1次比较,从n-i个关键字中找出最小的记录,记做a[k],将a[i]和a[k]交换。
(4)经过n-1趟,排序完成
具体代码实现如下:
#include <iostream>
using namespace std;
//算法关键 每趟排序结果找最小关键字,然后每一趟把每一个关键字放到一个最终的位置上
void sort(int a[],int size){
int k;
int i;
for( i=0;i<size-1;i++){
k=i;
for(int j=i+1;j<size;j++){
if(a[j]<a[k])
k=j;
}
//交换a[k]和a[i]
if(k!=i){
int temp=a[i];
a[i]=a[k];
a[k]=temp;
}
//输出每趟的排序结果
cout<<"第"<<i+1<<"趟排序结果:";
for(int i=0;i<size;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
}
int main()
{
int a[8]={40,36,64,90,49,19,25,66};
sort(a,8);
cout<<"简单选择排序后的结果:"<<endl;
for(int i=0;i<8;i++)
cout<<a[i]<<" ";
return 0;
}
测试结果如下: