选择排序

80 阅读1分钟

选择排序

选择排序的过程如下:外层循环控制一共要循环多少轮(也可以理解为选择多少轮),内存循环控制每次都找到未排序数组中最大的元素,将元素放在还未排序数组的最后。
排序过程中,使用一个变量记录最大值的下标,结束循环后再交换元素。

代码实现如下:

#include <stdio.h>
#include <vector>

using namespace std;

class SelectSort {
public:
    /// 找最小值往前放
    void sort1(vector<int>& arr) {
        int size = (int)arr.size();
        for (int i=0; i<size; i++) {
            int minIndex = i;
            for (int j=i; j<size; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            swap(arr, minIndex, i);
        }
    }
    
    
    /// 找最大值往后放
    void sort2(vector<int>& arr) {
        int size = (int)arr.size();
        
        for (int i=size-1; i>=0; i--) {
            int maxIndex = 0;
            for (int j=0; j<=i; j++) {
                /// 注意比较的时候,要拿着 arr[j] > arr[maxIndex],我粗心大意把 maxIndex 写成了 j+1
                if (arr[j] > arr[maxIndex]) {
                    maxIndex = j;
                }
            }
            
            swap(arr, maxIndex, i);
        }
    }
    
    void swap(vector<int>& arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
};