原理
又是一年的选妃开始,今年国王对身高比较敏感,要求这些候选者按照从低到高的顺序排列, 供其选择。。。
宫廷首席太监小桂子于是命令所有小公公把宫女的身高都量出来并上报到他处,然后命令身 为太监伴读小书童的你帮他按身高大小排好序,数据如下:
第一步 先找出所有候选美女中身高最高的,与最后一个数交换。
第二步 再找出除最后一位美女外其它美女中的最高者,与倒数第二个美女交换位置
第三步 再找出除最后两位美女外其它美女中的最高者,与倒数第三个美女交换位置,因为倒数 第三个本身已是最大的,所以实际无需交换.
重复以上步骤,直到最后只剩下一人,此时,所有的美女均已按照身高由矮到高的 顺序排列。
代码实现:
#include <stdio.h>
#include <stdlib.h>
void swap(int *num1,int *num2) //交换两个变量的值
{
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
void SelectSort1(int arr[], int len)
{
for( int i=0; i<len-1; i++)
{
int max = 0;
for(int j=1; j<len-i; j++)
{ //查找未排序的元素
if(arr[j]>arr[max])
{ //找到目前最小值
max = j;
}
}
if(max != (len-i-1))
{
swap(&arr[max], &arr[len-i-1]);
}
}
}
void SelectSort2(int arr[], int len){
int i,j;
for (i = 0 ; i < len - 1 ; i++) {
int min = i;
for (j = i + 1; j < len; j++){
//查找未排序的元素
if (arr[j] < arr[min]){//找到目前最小值
min = j; //记录最小值
}
}
swap(&arr[min], &arr[i]); //交换
}
}