voidbubbleSort(int arr[],int len){//len为数组长度//冒泡排序核心算法for(int i =0; i < len-1; i++){//i表示冒泡轮数for(int j =0; j < len - i-1; j++){if(arr[j]> arr[j+1]){int temp = arr[j];
arr[j]= arr[j+1];
arr[j+1]= temp;}}}}
冒泡排序优化
voidbubbleSort_pro(int arr[],int len){
bool isSort = true;for(int i =0; i < len -1; i++){//i表示冒泡轮数for(int j =0; j < len - i -1; j++){if(arr[j]> arr[j +1]){int temp = arr[j];
arr[j]= arr[j +1];
arr[j +1]= temp;
isSort = false;}}if(isSort){break;}}}
0x02. 选择排序
voidselectSort(int arr[],int len){for(int i =0; i < len -1; i++){for(int j = i +1; j < len; j++){if(arr[i]> arr[j]){int temp = arr[i];
arr[i]= arr[j];
arr[j]= temp;}}}}
0x03. 插入排序
voidinsertionSort_pro(int arr[],int len){int i =0;int j =0;for(i =1; i < len; i++){if(arr[i]< arr[i -1]){int value = arr[i];for(j = i -1; arr[j]> value && j >=0; j--){
arr[j +1]= arr[j];}
arr[j +1]= value;}}}
0x04. 希尔排序
//希尔排序voidshellSort(int arr[],int len){int gap =1;while(gap < len){
gap = gap *3+1;}while(gap >0){for(int i = gap; i < len; i++){int tmp = arr[i];int j = i - gap;while(j >=0&& arr[j]> tmp){
arr[j + gap]= arr[j];
j -= gap;}
arr[j + gap]= tmp;}
gap = gap /3;}/*直接对插入排序改写
int i = 0;
int j = 0;
int flag = 0;
int gap = len;
while (gap > 1) {
gap = gap / 3 + 1;
for (i = gap; i < len; i++) {
flag = arr[i];
if (arr[i] < arr[i - gap]) {
for (j = i - gap; arr[j] > flag&& j >= 0; j -= gap) {
arr[j + gap] = arr[j];
}
arr[j + gap] = flag;
}
}
}
*/}
//堆排序voidadjustDown(int arr[],int k,int len){//向下调整堆//函数adjustDown 将元素k向下进行调整
arr[0]= arr[k];//arr[0] 暂存for(int i =2* k; i <= len; i *=2){//沿key较大的子节点向下筛选if(i < len && arr[i]< arr[i +1]){
i++;//取key较大的子节点下标}if(arr[0]> arr[i]){//筛选结束break;}else{
arr[k]= arr[i];//将arr[i] 调整到双亲节点上
k = i;//修改k值,以便继续向下筛选}}//for
arr[k]= arr[0];//被筛选的节点的值放入最终位置}voidadjustUp(int arr[],int k){//参数k为向上调整的节点,也为堆元素的个数
arr[0]= arr[k];int i = k /2;//若节点的值大于双亲节点,则双亲节点向下调,并继续向上比较while(i >0&& arr[i]< arr[0]){
arr[k]= arr[i];//双亲节点下调
k = i;
i = k /2;//继续向上比较}//while
arr[k]= arr[0];//复制到最终位置}voidbuildMaxHeap(int arr[],int len){for(int i = len /2; i >0; i--){//从i=[n/2] ~ 1, 反复调整堆adjustDown(arr, i, len);}}voidheapSort(int arr[],int len){buildMaxHeap(arr, len);//初始建立堆for(int i = len; i >1; i--){swap(arr[i], arr[1]);adjustDown(arr,1, i -1);}//for}