zoukankan      html  css  js  c++  java
  • 归并排序——最省时的排序

    /*
    因为归并排序至于O(n)的复杂度所以省时
    */
    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<string>
    #include<algorithm>
    #include<vector>
    #include<map>
    
    #define N 100010
    #define MAXN 100010
    
    using namespace std;
    
    //将有二个有序数列a[first...mid]和a[mid...last]合并。
    void mergearray(int a[], int first, int mid, int last, int temp[])
    {
        int i = first, j = mid + 1;
        int m = mid,   n = last;
        int k = 0;
        while (i <= m && j <= n)    
        {
            if (a[i] <= a[j])
                temp[k++] = a[i++];
            else
                temp[k++] = a[j++];
        }
        
        while (i <= m)
            temp[k++] = a[i++];
        
        while (j <= n)
            temp[k++] = a[j++];
        
        for (i = 0; i < k; i++)
            a[first + i] = temp[i];
    }
    void mergesort(int a[], int first, int last, int temp[])
    {
        if (first < last)
        {
            int mid = (first + last) / 2;
            mergesort(a, first, mid, temp);    //左边有序
            mergesort(a, mid + 1, last, temp); //右边有序
            mergearray(a, first, mid, last, temp); //再将二个有序数列合并
        }
    }
    
    bool MergeSort(int a[], int n)
    {
        int *p = new int[n];
        if (p == NULL)
            return false;
        mergesort(a, 0, n - 1, p);
        delete[] p;
        return true;
    }
    
    int main()
    {
        //freopen("C:\Users\acer\Desktop\in.txt","r",stdin);
        int cur1[]={1,4,7,8,5,2,3,6,9,0};
        int cur2[12];
        mergesort(cur1, 0, 9, cur2);
        for(int i=0;i<10;i++)
            cout<<cur2[i]<<" ";
        cout<<endl;
        
        return 0;
    }
  • 相关阅读:
    阅读笔记第六次
    阅读笔记第五章
    阅读笔记第四章
    阅读笔记第三章
    软件需求分析课堂讨论
    阅读笔记第二篇
    阅读笔记五
    阅读笔记五
    阅读笔记三
    阅读笔记二
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/5866375.html
Copyright © 2011-2022 走看看