思路概述:
首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素都排序完毕。
简单选择排序算法并没有将比较结果存放在i处,而是保存每次比较结果中较小元素的下标,记录到min中,从而保证min一直指向较小的元素,最后将min处元素与i处元素交换。
简单选择排序函数:
void SelectSort(int array[],int length){
int min,i;
for(i=0;i<length-1;i++){ //外循环控制总趟数,总共进行length-1趟
min=i; //假设i处的数为最小值并将i赋值给min(初始化)
for(int j=i+1;j<length;j++){//从i+1开始一直到最后一个数依次与 array[min]进行比较
if(array[j]<array[min]){
min=j;
}
}
if(min!=i){ //若i不等于min,则将最小值交换放到i处
int temp=array[i];
array[i]=array[min];
array[min]=temp;
}
}
}
完整代码:
//简单选择排序
#include <iostream>
using namespace std;
void Print(int array[],int length){ //自定义输出函数,每执行一次打印一次序列
for(int i=0;i<length;i++){
cout<<array[i]<<" ";
}
cout<<endl;
}
void SelectSort(int array[],int length){
int min,i;
for(i=0;i<length-1;i++){ //外循环控制总趟数,总共进行length-1趟
min=i; //假设i处的数为最小值并将i赋值给min(初始化)
for(int j=i+1;j<length;j++){//从i+1开始一直到最后一个数依次与 array[min]进行比较
if(array[j]<array[min]){
min=j;
}
}
if(min!=i){ //若i不等于min,则将最小值交换放到i处
int temp=array[i];
array[i]=array[min];
array[min]=temp;
}
Print(array,length);
}
}
int main(){
int array[]={49,38,65,97,76,13,27,49};
int length=sizeof(array)/sizeof(*array);
Print(array,length); //先打印原始序列
SelectSort(array,length);
return 0;
}
运行示例: