选择排序
选择排序分为有序区和无序区,有序区保存排序好的元素,无序区则保存待排序的元素。
若要用选择排序实现从小到大排列,其思想是:每次都从无序区中选择一个最小的元素,并将其与无序区的第一个元素互换,然后有序区的范围扩大1,将这个最小元素包含进去,而无序区的范围则缩小1,直到无序区的只剩一个元素为止
伪代码如下:
1、将整个记录序列划分为有序区和无序区,初始时有序区为空,无序区包含所有元素
2、在无序区中查找最小的元素,将其与无序区的第一个元素交换,并让有序区扩展一个元素,无序区减少一个元素
3、不断重复步骤2,直到无序区只剩一个元素
c++算法:
#include<iostream>
using namespace std;
void selectSort(int S[], int n){
int i, j,index,temp;
for (i = 0; i < n-1; i++){ //注意这里到n-1为止就行,i代表无序区的第一个元素下标
index = i; //index记录无序区最小值的下标
for (j = i + 1; j < n; j++){ //j从i+1开始到最后一个元素
if (S[j] < S[index]) //比较下标为j的元素和无序区的最小值
index = j; //若下标为j的元素更小,则将index替换为j,保持S[index]为最小值
}
if (index != i){ //如果最小值的下标不是i,那么就说明无序区的最小值另有其他,调换两者的位置
temp = S[i];
S[i] = S[index];
S[index] = temp;
}
}
}
void main(){
int S[6] = {50,27,68,75,39,14};
selectSort(S, 6);
for (int i = 0; i < 6; i++)
{
cout << S[i] << "\t";
}
}
运行结果如下: