直接插入排序、折半插入排序、希尔排序

来源:互联网 发布:少年班 知乎 编辑:程序博客网 时间:2024/05/07 01:30
#include<iostream>using namespace std;//升序//直接插入排序(稳定)void InsertSort(int arr[],int left,int right){for(int i=left+1;i<=right;i++){if(arr[i]<arr[i-1]){int temp=arr[i];int j=i-1;do{arr[j+1]=arr[j];j--;}while(j>=left && temp<arr[j]);arr[j+1]=temp;}}}//折半插入排序(稳定)void BinaryInsertSort(int arr[],int left,int right){for(int i=left+1;i<=right;i++){int temp=arr[i];int low=left;int high=i-1;while(low<=high){int middle=(low+high)/2;if(temp<arr[middle]){high=middle-1;}else{low=middle+1;}}for(int k=i-1;k>=low;k--){arr[k+1]=arr[k];}arr[low]=temp;}}//希尔排序(设置间隔gap,再利用直接插入排序的思想) (不稳定)void ShellSort(int arr[],int left,int right){int gap=right-left+1;do{gap=gap/3+1;for(int i=left+gap;i<=right;i++){if(arr[i]<arr[i-gap]){int temp=arr[i];int j=i-gap;do{arr[j+gap]=arr[j];j=j-gap;}while(j>=left && temp<arr[j]);arr[j+gap]=temp;}}}while(gap>1);}void test(){int arr[7]={21,16,49,25,20,13,7};//InsertSort(arr,0,6);//BinaryInsertSort(arr,0,6);ShellSort(arr,0,6);for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++){cout<<arr[i]<<" ";}cout<<endl;}int main(){test();system("pause");return 0;}

0 0
原创粉丝点击