选择排序

7 阅读1分钟

选择排序

  • 特点: 每次在剩下的元素中选择值最小的元素,和当前元素进行交换
  • 缺点: 相比于冒泡排序,交换的次数少了,但是比较的次数依然很多

时间空间复杂度

排序算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度稳定性
选择排序O(n^2)O(n^2)O(n^2)O(1)不稳定

代码

#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

void ChoiceSort(int arr[], int size) {
  for(int i = 0; i < size -1; i++) {
    int min = arr[i];  // 记录最小值
    int k = i;   // 记录最小值下标

    for (int j = i + 1; j < size; j++) {
      if (arr[j] < min) {
        min = arr[j];
        k = j;
      }
    }

    if (k != i) {  // 将最小值交换到前面
      int tmp = arr[i];
      arr[i] = arr[k];
      arr[k] = tmp;
    }
  }

}

int main() {

  int arr[10];
  srand(time(nullptr));

  for (int i = 0; i < 10; i++) {
    arr[i] = rand() % 100 + 1;
  }

  for (int v : arr) {
    cout << v << " ";
  }

  cout << endl;

  ChoiceSort(arr, 10);

  for (int v : arr) {
    cout << v << " ";
  }

  cout << endl;

  return 0;
}

测试

➜  build git:(main) ✗ ./ChoiceSort 
54 30 42 21 69 92 92 89 57 25 
21 25 30 42 54 57 69 89 92 92