选择排序(Selection Sort)
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
C++实现
#include <iostream> using namespace std; template <typename T> /* 选择排序中心思想: 在arr[0]-arr[N-1]中找出最小的数,与a[0]对换 在arr[1]-arr[N-1]中找出最小的数,与a[1]对换 在arr[2]-arr[N-1]中找出最小的数,与a[2]对换 */ void SelectionSort(T a[], int len){ int i, j, i1; T temp; for(i = 0; i < len - 1; i++){ //外循环控制趟数,找 len-1 趟 for(j = i + 1; j < len; j++){ int k = i; //内循环,用 k 记住所找数中最小的下标 if(a[j] < a[k]){ k = j; } if(i != k){ temp = a[k]; a[k] = a[i]; a[i] = temp; } } cout << "第" << i + 1 << "趟排序: " ; for(i1 =0; i1 < len; i1++) cout << a[i1] << " "; cout << endl << endl; } } int main(){ int arr[] = {2, 90, 2, 1, 5, 11, 9, 7, 6, 88 }; int len = sizeof(arr) / sizeof(arr[0]); int i; cout << "未排序:"; for(i = 0; i < len; i++) cout << arr[i] << " " ; cout << endl << endl; SelectionSort(arr, len); cout << "排序后:"; for (int i = 0; i < len; i++) cout << arr[i] << " "; cout << endl << endl; return 0; } |
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/f0c4540d9cd11682c7b8ae763288b44f.png)