zoukankan      html  css  js  c++  java
  • 选择排序

    介绍

    在要排序的一组数中,选出最小或最大的一个数与第一个数交换;然后在剩下的数中再找最大或最小数,与第二个数交换。以此类推......

    直到第n-1个元素(倒数第二个数)和第n个元素(最后一个)比较为止。

    过程

    第一趟,从n个记录中找出关键码最小的记录与第一个记录交换;

    第二趟,从第二个记录开始的n-1个记录中再选出关键码最小的记录与第二个记录交换;

    以此类推.......

    第i趟,则从第i个记录开始的n-i+1个记录中选出关键码最小的记录与第i个记录交换;

    直到整个序列按关键码有序。

    代码

    #include<iostream>
    using namespace std;
    void print(int a[], int n, int i){
        cout << "" << i + 1 << "遍:";
        for (int j = 0; j < n; j++){
            cout << a[j] << " ";
        }
        cout << endl;
    }
    
    int SelectMinKey(int a[], int n, int i){
        int k = i;
        for (int j = i + 1; j < n; j++){
            if (a[k] > a[j])
                k = j;
        }
        return k;
    }
    
    void selectSort(int a[], int n){
        int key, tmp;
        for (int i = 0; i < n; i++){
            //最小的元素的下标
            key = SelectMinKey(a, n, i);
            if (key != i){
                //交换
                tmp = a[i];
                a[i] = a[key];
                a[key] = tmp;
            }
            print(a, n, i);
        }
    }
    
    
    int main(){
        int a[8] = {3,1,5,7,2,4,9,6};
        cout << "初始值:";
        for (int j = 0; j < 8; j++){
            cout << a[j] << " ";
        }
        cout << endl << endl;
        selectSort(a, 8);
        return 0;
    }

    结果:

  • 相关阅读:
    Dragon Balls_并查集
    Farm Irrigation_并查集||dfs
    The trouble of Xiaoqian_多重背包&&完全背包
    Difference Is Beautiful
    Bone Collector II_第k大背包
    Dividing_多重背包
    Milk
    coins_多重背包
    钱币兑换问题_完全背包&&拆分&&母函数
    多项式链表多项式相加
  • 原文地址:https://www.cnblogs.com/bluebean/p/5721851.html
Copyright © 2011-2022 走看看