voidSelectSort(int arr[],int n){for(int i =0; i < n -1; i++){int min = i;//查找最小的元素for(int j = i +1; j < n; j++){if(arr[min]> arr[j])
min = j;}if(min != i)
std::swap(arr[i], arr[min]);}}
2. 堆排序
//调整维护堆voidHeapAdjust(int arr[],int cur,int n){int temp = arr[cur];//不断比较进入子节点,将大的往上交换for(int i =2* cur +1; i < n; i = i *2+1){if(i +1< n && arr[i]< arr[i +1])
i++;if(arr[i]> temp){
arr[cur]= arr[i];
cur = i;}elsebreak;}
arr[cur]= temp;}//堆排序voidHeapSort(int arr[],int n){for(int i = n/2-1; i >=0; i--){HeapAdjust(arr,i,n);//至下而上调整堆}for(int i = n-1; i >0; i--){
std::swap(arr[0], arr[i]);//选择最大的保存HeapAdjust(arr,0, i);//调整根}}
测试用例
voidmain(){int arr[100];int n =10;srand(int(time(0)));for(int i =0; i < n; i++){
arr[i]=rand()%1000;
std::cout << arr[i]<<" ";}
std::cout <<" "<< std::endl;HeapSort(arr, n)for(int i =0; i < n; i++)
std::cout << arr[i]<<" ";}
排序名称时间复杂度空间复杂度稳定性简单选择排序O(n^2)O(1)不稳定堆排序O(nlog2n)O(1)不稳定1. 简单选择排序void SelectSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { int min = i; //查找最小的元素 for (int j = i + 1; j < n; j++) { if (arr[min] > arr[...