void selectSort(int q[])
{
for(int i=0;i+1<q.size();i++)
{
int idx=i;
for(int j=i+1;j<q.size();j++)
{
if(q[j]<q[idx])idx=j;
}
if(idx!=i)swap(q[i],q[idx]);
}
}
void insertSort(int q[])
{
for(int i=1;i<q.size();i++)
{
int t=q[i];
for(int j=i-1;j>=0;j--)
{
if(q[j]>t)swap(q[j],q[j+1]);
else break;
}
q[j+1]=t;
}
}
void quickSort(int q[],int l,int r)
{
if(l>=r)return;
int t=q[l+r>>1];
int i=l-1,j=r+1;
while(i<j)
{
do i++;while(q[i]<t);
do j--;while(q[i]>t);
if(i<j)swap(q[i],q[j]);
}
quickSort(q,l,j),quickSort(q,j+1,r);
}
void mergeSort(int q[],int l,int r)
{
if(l>=r)return;
int m=l+r>>1;
mergeSort(q,l,m),mergeSort(q,m+1,r);
int k=0,i=l,j=m+1;
while(i<=m && j<=r)
{
if(q[i]<=q[j])tmp[k++]=q[i++];
else tmp[k++]=q[j++];
}
while(i<=m)tmp[k++]=q[i++];
while(j<=r)tmp[k++]=q[j++];
for(i=l,j=0;i<=r;i++,j++)q[i]=tmp[j];
}
void BubbleSort(int q[],int l,int r)//梳排序
{
if(l>=r)return;
for(int i=l;i<r;i++)
{
for(int j=i;j<r-i;j++)
{
if(q[j]>q[j+1])swap(q[j],q[j+1]);
}
}
}
void adjust_heap(vector<int>& nums,int x,int n){
//桶排序
int l=x*2+1;
int r=x*2+2;
int max=x;
if(l<n&&nums[l]>nums[max])max=l;
if(r<n&&nums[r]>nums[max])max=r;
if(max!=x){
swap(nums[max],nums[x]);
adjust_heap(nums,max,n);
}
}
void heap_sort(vector<int>& nums){
int n=nums.size();
for(int i=n/2-1;i>=0;i--){
adjust_heap(nums,i,n);
}
for(int i=n-1;i>=0;i--){
swap(nums[i],nums[0]);
adjust_heap(nums,0,i);
}
}
void ShellSort(int A[],int n){
//前后记录位置的增量 dk
//增量dk 并逐步减小增量
for(int dk=n/2;dk>0;dk/=2){
//从第dk个元素,逐个对其所在组进行直接插入排序操作
for(int i=dk;i<n;++i){
int j=i;
while(j-dk>=0&&A[j]<A[j-dk]){
//插入排序交换法
swap(A[j],A[j-dk]);
j-=dk;
}
}
}
}
void InsertSort(int A[],int n){
//折半插入排序
int i,j=0;
for(i=1;i<n;i++){
int temp=A[i];
low=1;
high=i-1;
while(low<high){
mid=(low+high)/2;
if(A[mid]>temp){
high=mid-1;//查找左半子树
}
else
low=mid+1;
for(j=i-1;j>high+1;--j){
A[j+1]=A[j];
}
A[high+1]=temp;
}
}
各大排序算法
猜你喜欢
转载自blog.csdn.net/weixin_51928751/article/details/121312199
今日推荐
周排行