#include<iostream>usingnamespace std;voidadjust(int*arr,int size,int i){int left =2* i +1;int right =2* i +2;int maxid = i;if(left < size && arr[left]> arr[maxid]){
maxid = left;}if(right < size&&arr[maxid]< arr[right]){
maxid = right;}if(arr[maxid]!= arr[i]){swap(arr[maxid], arr[i]);adjust(arr, size, maxid);}}voidbubblesort(int*arr,int size){for(int i = size /2-1; i >=0;--i){adjust(arr, size, i);//调整所有非叶子节点 5 4 3 2...}for(int i = size -1; i >0; i--){swap(arr[i], arr[0]);//把最大的堆顶元素放到队尾adjust(arr, i,0);//调整除过队尾剩余的元素}}//Test函数intmain(){int arr[]={9,5,7,8,3,6,4,1,2};int n =sizeof(arr)/sizeof(arr[0]);bubblesort(arr, n);for(int i =0; i < n;++i){
cout << arr[i]<<" ";}return0;}
希尔排序
#include<iostream>usingnamespace std;voidhillsort(int*arr,int size){for(int gap = size /2; gap >=1; gap = gap /2){for(int i = gap; i < size;++i){for(int j = i - gap; j >=0&& arr[j]> arr[i]; j = j - gap){swap(arr[j], arr[i]);}}}}//Test函数intmain(){int arr[]={9,5,7,8,3,6,4,1,2};int n =sizeof(arr)/sizeof(arr[0]);hillsort(arr, n);for(int i =0; i < n;++i){
cout << arr[i]<<" ";}return0;}