• 排序算法之归并排序


    版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/caihongshijie6/article/details/26156065

    一、算法思想描写叙述

          归并排序:先递分解序列,然后在合有序序列。其过程描写叙述例如以下:每次输出A、B这两个有序序列中的最小的一个。

         


    二、算法分析

         时间复杂度:最差、平均、最好的时间复杂度都是O(nlgn);

         空间复杂度:O(n)

         稳定性: 稳定


    三、算法实现

       

    /*
     * mergesort.cpp
     *
     *  Created on: 2014年5月18日
     *      Author: pc
     */
    
    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    const int maxn = 10;
    int arr[maxn];
    
    
    /**
     * 合并有序序列
     */
    void mergeArr(int arr[],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(arr[i] <= arr[j]){//去两个序列中的最小值。这里要用<=,否则就不是稳定排序了
    			temp[k++] = arr[i++];
    		}else{
    			temp[k++] = arr[j++];
    		}
    	}
    
    	//下面两个循环用于处理某一个序列没有值的情况
    	while(i <= m ){
    		temp[k++] = arr[i++];
    	}
    
    	while(j <= n){
    		temp[k++] = arr[j++];
    	}
    
    	//更新原序列
    	for(i = 0 ; i < k ;++i){
    		arr[first+i] = temp[i];
    	}
    }
    
    
    /**
     * 归并排序
     */
    void mergeSort(int arr[],int first,int last,int temp[]){
    	if(first < last){//假设还没切割到仅仅剩一个元素,就不断的切割
    		int mid = (first+last)/2;
    		mergeSort(arr,first,mid,temp);//达到左边有序的状态
    		mergeSort(arr,mid+1,last,temp);//达到右边有序的状态
    		mergeArr(arr,first,mid,last,temp);//归并
    	}
    }
    
    //void MergeSort(int arr[],int n){
    //	int* temp = new int[n];
    //	mergeSort(arr,0,n-1,temp);
    //}
    
    void createReverseArr(){
    	int i = 0;
    	for(i = 0 ; i < maxn ; ++i){
    		arr[i] = maxn - i;
    	}
    }
    
    void printArr(){
    	int i;
    	for(i = 0 ; i < maxn ; ++i){
    		printf("%d " , arr[i]);
    	}
    	printf("
    ");
    }
    
    
    int main(){
    	int temp[maxn];
    
    	createReverseArr();
    	printArr();
    	mergeSort(arr,0,maxn-1,temp);
    //	MergeSort(arr,maxn);
    	printArr();
    
    }
    
    
    

      

  • 相关阅读:
    CodeForces
    CodeForces
    CodeForces 718C && HDU 3572 && Constellation
    CodeForces
    USACO 5.4 tour的dp解法
    10.22~10.28一周经典题目整理(meeting,BZOJ4377,POJ3659)
    codeforces 724D
    codeforces 724C
    hdu5909 Tree Cutting
    hdu5822 color
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10718983.html
  • Copyright © 2020-2023  润新知