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