zoukankan      html  css  js  c++  java
  • 排序:归并排序

    归并排序是又一类不同的排序方法。

    归并的含义是将两个或两个以上的有序表组合成一个新的有序表。

    2-路归并排序中的核心操作是将一位数组中的前后相邻的两个有序序列合并为一个有序序列。

    详细代码和測试例如以下:

    #include <iostream>
    using namespace std;
    #include<list>
    
    #define M 21
    
    typedef int SqList[M];
    
    /*归并排序是又一类不同的排序方法。归并的含义是将两个或两个
    以上的有序表组合成一个新的有序表。
    2-路归并排序中的核心操作是将一位数组中的前后相邻的两个有序序列合并
    为一个有序序列*/
    void Merge(SqList &L,int left,int mid,int right)         //归并排序
    {
    	SqList L1;                                           //新定义一个数组
    	int i = left, j = mid+1, p = 0;                      //分成两部分
    	while(i <= mid && j <= right)                        //两部分開始比較
    	{
    		if(L[i] <= L[j])                                  //排序
    		{
    			L1[p++] = L[i++];                            //插入到新的空间内
    		}
    		else
    		{
    			L1[p++] = L[j++];                          
    		}
    	}
    	while(i <= mid)                                      //左半部分数据多
    	{
    		L1[p++] = L[i++];
    	}
    	while(j <= right)                                    //右半部分数据多
    	{
    		L1[p++] = L[j++];
    	}
    	for(p = 0,i = left;i <= right;++p,++i)               //又一次复制到原数组中
    	{
    		L[i] = L1[p];
    	}
    }
    
    void MSort(SqList &L,int left,int right)                 
    {
    	if(left >= right)                                     //长度小于等于1
    	{
    		return;
    	}
    	else
    	{
    		int mid = (left+right)/2;                         //中值
    		MSort(L,left,mid);                                //左排序
    		MSort(L,mid+1,right);                             //右排序
    		Merge(L,left,mid,right);                          //归并
    	}
    }
    
    void main()
    {
    	SqList sq = {53,24,35,56,32,78,99}; 
    	for(int i = 0;i < 7; ++i)
    	{
    		cout<<sq[i]<<" ";
    	}
    	cout<<endl;
    	MSort(sq,0,6);
    	for(i = 0;i < 7; ++i)
    	{
    		cout<<sq[i]<<" ";
    	}
    	cout<<endl;
    }

    希望大家能够指出我的不足,在今后的学习中我会加以改正,谢谢~

  • 相关阅读:
    python操作MySQL数据库(转)
    python3.3.2中的关键字(转)
    HashMap的键值需要注意什么?
    为什么基本类型不能做为HashMap的键值?
    怎么确保一个集合不能被修改?
    Iterator和 ListIterator有什么区别?
    Iterator怎么使用?有什么特点?
    迭代器Iterator是什么?
    哪些集合类是线程安全的?
    Queue的element()和peek()方法有什么区别?
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7026031.html
Copyright © 2011-2022 走看看