• 快速排序(C++模版技术实现)


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

    //
    // C++模版技术实现快速排序. 
    // 
    
    #include <cstdlib>
    #include <cstring>
    #include <iostream> 
    #include <stdexcept>
    
    //
    // 两值交换. 
    //
    template <typename T>
    inline void swap(T &x, T &y)
    {
    	T temp = x;
    	x = y;
    	y = temp;
    }
     
    //
    // 快速排序函数模版. 
    // 以首元素为基准(pivot)进行划分. 
    //
    template <typename T>
    void quickSort(T *array, size_t first, size_t last)
    {
    	if (NULL == array) {
    		throw std::invalid_argument("参数 array 不能为 NULL.");
    	}
    	
    	if (first < last)
    	{
    		static size_t pivot, i, j;
    		static T *pPivotValue;
    		
    		pivot = first, i = first + 1, j = last;
    		pPivotValue = &array[pivot];
    		
    		while (i < j) 
    		{
    			if (array[i] > *pPivotValue) {
    				swap(array[i], array[j--]);
    			} 
    			else {
    				i++;
    			}
    		}
    		if (*pPivotValue <= array[i]) {
    			--i;
    		}
    		swap(array[pivot], array[i]);
    		
    		quickSort(array, first, i);
    		quickSort(array, j, last);
    	}
    }
    
    
    //
    // 测试.
    //
    int main(void)
    {
    	char szTest[] = "Quick 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]);
    
    	quickSort(szTest, 0, strlen(szTest) - 1);
    	quickSort(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; 
    }
    
  • 相关阅读:
    Python 第八章笔记
    B树和B+树的总结
    哈希表总结
    Redis基本数据结构总结之STRING和LIST
    红黑树之删除原理和实现
    红黑树之插入实现
    对排名前3000位博主进行数据分析
    o(n)线性排序算法
    排序算法总结
    贪心算法 题型总结
  • 原文地址:https://www.cnblogs.com/wxxweb/p/2060882.html
Copyright © 2020-2023  润新知