选择排序—简单选择排序(Simple Selection Sort)
基本思想:
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
简单选择排序的示例:
操作方法:
第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换;
第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换;
以此类推…..
第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与第i 个记录交换,
直到整个序列按关键码有序。
#include<iostream>
#include<string>
using namespace std;
void print(int a[],int n,int i){
cout << "第" << i+1 << "趟:";
for(int j=0;j<n;j++){
cout << a[j] << " ";
}
}
int selectMin(int a[],int n,int i){
int k=i;
//找的时候是从i+1开始找的
for(int j=i+1;j<n;j++){
if(a[k] >a[j]) k=j;
}
return k;
}
void selectSort(int a[],int n){
int key ;
//从0开始循环,从1开始找,因为找到的最小值是要跟0位置换
for(int i=0;i<n;i++){
key=selectMin(a,n,i);
if(key != i){
int temp;
temp=a[i];
a[i]=a[key];
a[key]=temp;
}
print(a,n,i);
}
}
int main(){
int a[8]={9,7,6,5,4,3,2,1,};
selectSort(a,8);
}
第1趟:1 7 6 5 4 3 2 9
第2趟:1 2 6 5 4 3 7 9
第3趟:1 2 3 5 4 6 7 9
第4趟:1 2 3 4 5 6 7 9
第5趟:1 2 3 4 5 6 7 9
第6趟:1 2 3 4 5 6 7 9
第7趟:1 2 3 4 5 6 7 9
第8趟:1 2 3 4 5 6 7 9