zoukankan      html  css  js  c++  java
  • 归并排序(C++模版技术实现)

    下面代码仅供本人复习数据结构所用,实用性N低,各位飘过吧~~哈哈:>

    //
    // C++ 模版技术实现归并排序. 
    // 
    
    #include <cstdlib>
    #include <cstring> 
    #include <iostream>
    #include <stdexcept>
    
    //
    // 归并操作. 
    //
    template <typename T> 
    void merge(T *array, const size_t low, const size_t mid, const size_t high)
    {	
    	if (NULL == array) {
    		throw std::invalid_argument("参数 array 为 NULL.");
    	}
    	
    	// 辅组空间. 
    	T *tempArray = new T[high - low + 1];
    	
    	size_t i, begin1, begin2;
    	for (i = 0, begin1 = low, begin2 = mid + 1; 
    		begin1 <= mid && begin2 <= high; ++i)
    	{
    		tempArray[i] = array[begin1] < array[begin2] 
    			? array[begin1++] : array[begin2++];
    	}
    
    	while (begin1 <= mid) {
    		tempArray[i++] = array[begin1++];
    	} 
    	while (begin2 <= high) {
    		tempArray[i++] = array[begin2++];
    	}
    	
    	for (i = 0; i < high - low + 1; ++i) {
    		array[low + i] = tempArray[i];
    	}
    	
    	delete[] tempArray;
    }
    
    //
    // 归并排序. 
    //
    template <typename T>
    void mergeSort(T *array, const size_t first, const size_t last)
    {
    	if (first < last)
    	{
    		size_t mid = (first + last) / 2;
    		mergeSort(array, first, mid);
    		mergeSort(array, mid + 1, last);
    		merge(array, first, mid, last);
    	}
    }
    
    //
    // 测试 
    //
    int main(void)
    {
    	char szTest[] = "Merge sort algorithm test case !"; 
    	int iarrTest[] = {23, 12, 2, 123, 72, 35, 49, 51, 83, 94, 65}; 
    	const size_t INT_ARR_SIZE = sizeof(iarrTest) / sizeof(iarrTest[0]);
    
    	mergeSort(szTest, 0, strlen(szTest) - 1);
    	mergeSort(iarrTest, 0, INT_ARR_SIZE - 1);
    
    	std::cout << szTest << std::endl;
    
    	for (size_t i = 0; i < INT_ARR_SIZE; ++i)
    	{
    		std::cout << iarrTest[i] << " "; 
    	}
    	std::cout << std::endl;
    
    	return EXIT_SUCCESS; 
    }
    
  • 相关阅读:
    Visio 2003 怎样将用例图画的更美观些
    Mvc项目实例 MvcMusicStore 四
    Mvc项目实例 MvcMusicStore 三
    Lock 会引起死锁吗
    进程和线程
    vb.net winform pos机并口打印机打印以及开钱箱。。。。
    .net winfrom 定义全局快捷键!
    WebBrowser中HTML的js与winform中其他的窗体调用。。。
    [转]确认网络环境3G/WIFI
    图片分割的代码
  • 原文地址:https://www.cnblogs.com/wxxweb/p/2060746.html
Copyright © 2011-2022 走看看