八大排序算法(3) 简单选择排序

来源:互联网 发布:百度贴吧和天涯知乎 编辑:程序博客网 时间:2024/06/04 13:24

基本思路

每次选出剩余序列中最小/最大的数、与剩余序列的第一个交换位置。

示例:

// 升序,左起/*初始值*/    10, 7, 1, 8, 5, 12, 6, 3, 9/*第1趟*/     1, 7, 10, 8, 5, 12, 6, 3, 9/*第2趟*/     1, 3, 10, 8, 5, 12, 6, 7, 9/*第3趟*/     1, 3, 5, 8, 10, 12, 6, 7, 9/*第4趟*/     1, 3, 5, 6, 10, 12, 8, 7, 9/*第5趟*/     1, 3, 5, 6, 7, 12, 8, 10, 9/*第6趟*/     1, 3, 5, 6, 7, 8, 12, 10, 9/*第7趟*/     1, 3, 5, 6, 7, 8, 9, 10, 12/*第8趟*/     1, 3, 5, 6, 7, 8, 9, 10, 12/*第9趟*/     1, 3, 5, 6, 7, 8, 9, 10, 12

代码

void printList(int *l, int n) {    for (int i = 0; i < n; i++) {        printf("%d ", l[i]);    }    printf("\n");}int main() {    int list[50] = { 10, 7, 1 , 8, 5, 12, 6, 3, 9};    printList(list, 9);    // 简单选择排序,每次选取最小的放最前面    for (int i = 0; i < 9; i++ ) {        int minIndex = i;        for (int j = i+1; j < 9; j++){            if ( list[j] < list[minIndex]){                // 替换最小值的 index                minIndex = j;            }        }        int k = list[i];        list[i] = list[minIndex];        list[minIndex] = k;        printList(list, 9);    }    system("pause");    return 0;}

进阶 – 二元选择排序

简单选择排序每次循环只选出了一个数, 二元选择排序则同时选出最大最小的元素。
这样外循环只需要 n/2 次就能得到结果。

示例:

// 升序,二选选择排序/*初始值*/    10, 7, 1, 8, 5, 12, 6, 3, 9/*第1趟*/     1, 7, 10, 8, 5, 9, 6, 3, 12/*第2趟*/     1, 3, 7, 8, 5, 9, 6, 10, 12/*第3趟*/     1, 3, 5, 8, 7, 6, 9, 10, 12/*第4趟*/     1, 3, 5, 6, 7, 8, 9, 10, 12

代码

int main() {    int list[50] = { 10, 7, 1 , 8, 5, 12, 6, 3, 9};    printList(list, 9);    // 二元选择排序,每次选取最小的放最前面,选最大的放后面    for (int i = 0; i < 9 / 2; i++) {        int minIndex = i;        int maxIndex = i;        for (int j = i+1; j < 9 - i; j++){            if ( list[j] < list[minIndex]  ){                minIndex = j;       // 找出最小            } else if ( list[j] > list[maxIndex] ){                maxIndex = j;       // 找出最大            }        }        if ( i != minIndex ){            int k = list[i];            list[i] = list[minIndex];            list[minIndex] = k;        }        // 要特别留意 maxIndex == i 的时候,i 可能会被换掉        if ( maxIndex == i ){            maxIndex = minIndex;        }        int m = list[9 - i - 1];        list[9 - i - 1] = list[maxIndex];        list[maxIndex] = m;        printList(list, 9);    }system("pause");return 0;}

以上

原文链接 http://blog.csdn.net/u011546766/article/details/74024935

原创粉丝点击