先找最小的放在第一个,接着在剩余部分再找最小的放第二个以此类推
void sort(int arr[], int n) { for (int j = 0; j < n - 1; j++) { int minPos = j; for (int i = j + 1; i < n; i++) { if (arr[i] < arr[minPos]) { minPos = i; } } swap(&arr[j], &arr[minPos]); } }
每次遍历数组同时找出最大值和最小值,分别放在两端,同时收缩
void sortP(int arr[], int n) { for (int j = 0; j < n - j - 1; j++) { int minPos = j; int maxPos = n - j - 1; for (int i = j; i < n - j; i++) { if (arr[i] < arr[minPos]) { minPos = i; } if (arr[i] > arr[maxPos]) { maxPos = i; } } if (minPos == maxPos) { return; } if (minPos == n - j - 1) { swap(&arr[j], &arr[minPos]); swap(&arr[n - j - 1], &arr[maxPos]); } else { swap(&arr[n - j - 1], &arr[maxPos]); swap(&arr[j], &arr[minPos]); } } }
比较弱小,并且不稳定
最简单的算法
速度缓慢