选择排序的基本思想:将一个元素个数为n的数组,通过第一次找出最小/者最大的数,将这个数与最后一个/第一个位置的元素交换,然后下次从n-1个位数中继续执行上面同样的操作,经过n-1次完成排序的过程,一下是代码演示:
#include<iostream>
using namespace std;
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void selectSort(int girl[],int len) {
//int len = sizeof(girl) / sizeof(int);//不能这样搞,len=1(一直)
for (int i = 0; i < len - 1; i++) {
int max = 0; //用于指向每一次循环找到得最大值得下标
for (int j = 1; j < len - i; j++) {
if (girl[j] > girl[max]) {
max = j;
}
}
//跳出循环后找到了本轮的最大值
//如果该最大值不是最后一个就将该最大值与最后一个交换
if (max != len - 1 - i) {
swap(&girl[max], &girl[len - 1 - i]);
}
}
}
int main() {
int girl[] = { 168,158,173,168,179,166,158,163,180 };
int len = sizeof(girl) / sizeof(int);
selectSort(girl,len);
for (int i = 0; i < len; i++) {
cout << girl[i] << " ";
}
system("pause");
return 0;
}
从代码中可以看出,选择排序的过程有两个for循环,外层的for循环确定了要进行排序的元素的个数,内层的for循环表示剩下元素跟后面元素(除去已经拍好序)比较的次数。