| 
 
| 复制代码#include <stdio.h>
//选择排序的第一种方法,跟冒泡排序法有点像,两两交换
void selectSort(int arr[],int len){
    //写双重循环
    int temp;
    for (int i=0; i<len-1; i++) {
        for (int j=i+1; j<len; j++) {
            //交换的条件
            if(arr[i]>arr[j]){
                //让arr[i] 和 arr[j]  进行交换
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}
//选择排序的第二种方法,只交换一次,因此更高效
void otherSort(int arr[],int len){
    //写双重循环
    int temp,min;
    for (int i=0; i<len; i++) {
        //每次假设a[i]是最小值
        min = i;
        for (int j=i+1; j<len; j++) {
            if (arr[j]<arr[min]) {
                //找到最小的那个元素的下标
                min = j;
            }
        }
        //如果找不到比arr[i]小的数,就不再交换
        if (i != min) {
            //将第i+1个元素与最小的元素交换
            temp = arr[i];
            arr[i] = arr[min];
            arr[min] = temp;
        }
    }
}
int main(int argc, const char * argv[]) {
    //定义一个数组
    int a[10]={23,12,4,67,20,100,21,45,3,28};
    int b[10]={23,12,4,67,20,100,21,45,3,28};
    //目的排序
    selectSort(a, 10);
    otherSort(b, 10);
    //遍历输出数组
    for (int i=0; i<10; i++) {
        printf("%d\t",a[i]);
    }
    printf("\n");
    for (int i=0; i<10; i++) {
        printf("%d\t",b[i]);
    }
    return 0;
}
 | 
 |