voidswap(int& a, int& b) { int temp = 0; temp = a; a = b; b = temp; }
voidprint(int* arr, int len) {
for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl; }
voidSelectSort1(int* arr, int len) { for (int i = 0; i < len - 1; i++) { int max = 0; for (int j = 1; j < len - i; j++) { if (arr[j] > arr[max]) { max = j; } } //如果此时找到的最大的数的下标不是最后一个 if (max != len - i - 1) { swap(arr[len - i - 1], arr[max]); } } print(arr, len); //我不喜欢这种选择排序的写法,不够一目了然 }
voidSelectSort2(int* arr, int len) { int max = 0; int end = len - 1; while (end) { max = 0;//每次都以为第一个是最大的 for (int i = 1; i <= end; i++) { if (arr[i] > arr[max])//大于号改小于号就变成递减了 { max = i; } } if (max != end) { swap(arr[max], arr[end]); } end--; } print(arr, len); }
intmain(void) { int tempArry[] = { 10,22,5,6,1,87,99,12,333 }; int len = sizeof(tempArry) / sizeof(tempArry[0]); //SelectSort1(tempArry, len); SelectSort2(tempArry, len); return0; }