因为是经典的算法,所以网上描述一大把,直接上个图,直观些,给记性不好的菜鸟(如我)一点儿提示。
算法很简单,遍历整个数组,依次选取最小值放到数组前面。
下面是代码(欢迎批评指点,之后应该会放到github上:https://github.com/y277an/princeton_algs4):
//---------------------------------Specification of Program------------------------------ // Program Name:直接选择排序 // Tools:VS_2013 // Language: C++ // Description: 可自由输入,不需要提早知道数据长度 // Date:2016.3.18 // Author:mseddl //---------------------------------------------------------------------------------------- #include <iostream> using namespace std; void Swap(int& one, int & another) { one ^= another; another ^= one; one ^= another; } void SelectSort(int *arr, int len) { for (int i = 0; i < len-1; i++) { int nSmallest = arr[i]; int flag(i);//记录新产生的最小值的索引 for (int j = i; j < len; j++) { if (arr[j] < nSmallest) { nSmallest = arr[j]; flag = j; } } if (flag != i) { Swap(arr[i], arr[flag]); } } } int main() { int len(0), temp; int *arr = new int[100]; char ch; cout << "请输入要排序的数字,以空格隔开:"; while (1) { cin >> temp; arr[len++] = temp; cin.get(ch); if (ch == '\n') { break; } } SelectSort(arr, len); cout << "排序后的数字为:"; for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl; delete[] arr; }