从待排序列中,第一趟从data[0]至data[n-1]中寻找最小值,然后与data[0]交换,第二趟从data[1]至data[n-1]中寻找最小值,然后与data[1]交换数据,第三趟从data[2]至data[n-1]中寻找最小值,与data[2]交换数据,以此类推进行下去,最终得到一个从小到大排列的有序序列。
如图所示是对待排序列排序的过程,从例子中我们可以得到一些关键的节点信息,便于我们编写代码。我们可以观察到5个待排数据,最终排成有序序列共需要走4趟,从选择排序的介绍我们可以知道选择排序每一趟都在追寻最小的数据,然后放在前面,如果有5个数据,找到4个数据的最终位置,那么剩下一个元素的位置也就固定了。
#include <iostream> using namespace std; class SelectSort { public: void selectSort(int arr[], int length) { for (int j = 0; j < length - 1; j++) { int min = arr[j]; int minIndex = j; for (int i = j + 1; i < length; i++) { if (min > arr[i]) { min = arr[i]; minIndex = i; } } arr[minIndex] = arr[j]; arr[j] = min; } } }; int main() { int arr[] = { 10,5,1,-3,0 }; SelectSort sort; int length = sizeof(arr) / sizeof(arr[0]); sort.selectSort(arr, length); for (int i = 0; i < length; i++) { cout << arr[i] << " "; } //选择排序 //待排序列 10,5,1,-3,0 //第一趟 -3,5,1,10,0 //第二趟 -3,0,1,10,5 //第三趟 -3,0,1,10,5 //第四趟 -3,0,1,5,10 }
以上是关于选择排序算法的学习总结,如有错误,请多多指教。