考研408专业课最重要的三个排序算法(堆排,归并,快排)

#include <bits/stdc++.h>
using namespace std;

int myArray[1000]={0};
void arrayPrint(int arr[],int s,int e){
    for(int i=s;i<e;i++)printf("%d ",arr[i]);
    printf("\n\n");
}
void MaxHeapAdject(int arr[],int root,int length){
    for(int i=length/2;i>=root;i--)
        for(int j=i*2;j<=length;j*=2){
            if(j+1<=length&& arr[j+1]>arr[j])j++;
            if(arr[j]>arr[i])swap(arr[j/2], arr[j]);
        }
}
void heapSort(int arr[],int root,int length){
    for(int i=length;i>root;i--){
        MaxHeapAdject(arr, root, i);
        myArray[0]=0;
        swap(arr[root], arr[i]);
    }
    arrayPrint(arr, root, root+length);
}

void Merge(int arr[],int s,int length,int e){
    myArray[0]=0;
    int mid = s+length/2,r=mid,i=0,start=s;
    vector<int>help(length);
    for(;i<length;i++){
        if(s>=mid||r>=e)break;
        if(arr[s]<arr[r])help[i]=arr[s++];
        else help[i]=arr[r++];
    }
    if(s<mid)for(;s<mid;s++)help[i++]=arr[s];
    if(r<e)for(;r<e;r++)help[i++]=arr[r];
    for(int i=0;i<length;i++)arr[start+i]=help[i];
}

void MergeSort(int arr[],int s,int length){
    for(int size=2;size<length*2;size*=2){
        for(int i=s;i<s+length;i+=size)
            Merge(arr, i, size,min(i+size,s+length));
    }
    arrayPrint(myArray, 1, 101);
}
int partition(int arr[],int low,int high){
    int key = arr[low];
    while(low<high) {
        while(arr[high]>=key&&high>low)high--;
        arr[low]=arr[high];
        while(arr[low]<=key&&low<high)low++;
        arr[high]=arr[low];
    }
    arr[low]=key;
    return low;
}

void quickSort(int arr[],int low,int high){
    if(low<high){
        int p = partition(arr, low, high);
        quickSort(arr, low, p-1);
        quickSort(arr, p+1, high);
    }
}


int main(){
    //std::ios::sync_with_stdio(false);
    for(int i=1;i<=100;i++)myArray[i]=rand()%200;
    arrayPrint(myArray, 1, 101);
    //heapSort(myArray, 1, 100);
    //MergeSort(myArray, 1, 100);
    quickSort(myArray, 1, 100);
    arrayPrint(myArray, 1, 101);
    
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值