2、选择排序
选择排序(升序)的思想:总是从待排数组中选择最小的数
#include <bits/stdc++.h>
using namespace std;
void select_sort(int* a, int len);
void print(int* a, int len, bool isBefore= true);
int main(){
int arr[10] = {1, 2, 66, 33, 88, 100, 18, 78, 12, 321};
print(arr, 10);
cout << "选择排序:" << endl;
select_sort(arr, 10);
print(arr, 10, false);
return 0;
}
void print(int* a, int len, bool isBefore){
if(isBefore)
cout << "before sort:";
else
cout << "after sort:";
for(int i = 0; i< len; i++){
cout << a[i] << " ";
}
cout << endl;
}
void select_sort(int* a, int len){
//从待排数组(0-len-1)中选择最小的,放到第一个元素处。
//从待排数组(1-len-1)中选择最小的,放到第一个元素处。
int temp;
int minIdx;
for(int i = 0; i < len-1;i++){//多少论
temp = a[i];//先保存一下
minIdx = i;
for(int j = i; j < len; j++){
minIdx = (a[j] < a[minIdx])?j:minIdx;
}
a[i] = a[minIdx];
a[minIdx] = temp;
}
}
思路分析(升序):
第一轮结束:1,2,66,33,88,100,18,78,12,321
第二轮结束:1,2,66,33,88,100,18,78,12,321
第三轮结束:1,2,12,33,88,100,18,78,66,321
第四轮结束:1,2,12,18,88,100,33,78,66,321
第五轮结束:1,2,12,18,33,100,88,78,66,321
第六轮结束:1,2,12,18,33,66,88,78,100,321
第七轮结束:1,2,12,18,33,66,78,88,100,321
此时已经全部排序完毕。