归并排序

class Solution {
public:
    /**
     * @param A an integer array
     * @return void
     */
    void sortIntegers2(vector<int>& A) {
        // Write your code here
        vector<int>temp(A.size(),0);
        mergeSort(A,temp,0,A.size()-1);
        
    }
    
    void mergeSort(vector<int>& A,vector<int>& temp,int start,int end){
        if (start>=end) {
            return;
        }
        int mid = (start+end)/2;
        mergeSort(A,temp,start,mid);
        mergeSort(A,temp,mid+1,end);
        merge(A,temp,start,mid,end);
        
    }
    
    void merge(vector<int>& A,vector<int>& temp,int start,int mid,int end) {
       int i = start;
       int j = mid+1;
       int k = start;
       while(i<=mid && j<=end) {
           if(A[i]>A[j]) {
               temp[k] = A[j++];
           } else {
               temp[k] = A[i++];
           }
           k++;
       }
       while(i<=mid){
           temp[k++] = A[i++];
       }
       while(j<=end){
           temp[k++] = A[j++];
       }
       for(int p = start;p<=end;p++){
           A[p] = temp[p];
       }
       
    }
    
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容