泛型,Quick Sort 的C/C++两种实现方式
来源:互联网 发布:路由器上面的访客网络 编辑:程序博客网 时间:2024/05/20 11:25
Quick Sort 作为20世纪的10大算法,实现的算法思想为分治策略(Divide And Conquer)。分治策略这种思想是程序设计中最常用到的思想。它的基本思想是把原问题递归划分为若干个子问题,通过分别求解子问题(相对简单情况),然后组合这些子问题的解,从而形成原问题的解。本文,分别用C/C++实现泛型的Quick Sort,具体代码如下:
#ifndef _MERGE_SORT_H_#define _MERGE_SORT_H_#define MAXLEN 65535#include <functional>#include <algorithm>#include <iostream>/** swap data object for c++ implementation of quick sort**/template<class T>void SwapObj( T& first, T& second ){T temp = first;first = second;second = temp;}/** c++ implementation of generic quick sort**/template<class T>int PartitionCPlus( T item[], int left, int right ){int i = left - 1;int j = right;T pivot = item[right];while( i <= j ){while( item[++i] < pivot );while( item[--j] > pivot ){if( j <= i )break;}if( j <= i )break;SwapObj( item[i], item[j] );}SwapObj( item[i], item[right] );return i;}/** interface of c++ implementation of generic quick sort**/template<class T>void QuickSortCPlus( T item[], int left, int right ){if( left >= right )return;int mid = PartitionCPlus( item, left, right );QuickSortCPlus( item, left, mid - 1 );QuickSortCPlus( item, mid + 1, right );}/** swap data object for c implementation of quick sort**/void SwapCharBuffer( void* first, void* second, size_t elemSize ){char* buf = (char*)malloc(elemSize);assert( buf );memcpy( buf, (char*)first, elemSize );memcpy( first, second, elemSize );memcpy( second, buf, elemSize );free( buf );}/** c implementation of generic quick sort**/void ImplQuickSortC( void* item, size_t elemSize, int (*cmp)( void* first, void* second ), int start, int end ){if( start >= end )return;void* pivot = (char*)item + start;int i = start + elemSize;int j = end;while( i < j ){if( cmp( (char*)item + i, pivot ) <= 0 ){i += elemSize;}else{j -= elemSize;SwapCharBuffer( (char*)item + i, (char*)item + j, elemSize );}}i -= elemSize;SwapCharBuffer( (char*)item + start, (char*)item + i, elemSize );ImplQuickSortC( item, elemSize, cmp, start, i );ImplQuickSortC( item, elemSize, cmp, j, end );}/** interface function of c implementation of generic quick sort**/void QuickSortC( void* item, size_t elemCount, size_t elemSize, int (*cmp)( void* first, void* second ) ){ImplQuickSortC( item, elemSize, cmp, 0, (elemCount)*elemSize );}int CmpFunc( void* first, void* second ){return *(int*)first - *(int*)second;}template<class T>void Output( const T item[], size_t len ){std::cout << "output result as follows:" << std::endl;int intervalLen = 10;for( int i= 0; i < len; i++ ){if( 0 == i || (i % 10) ){std::cout<< item[i] << " ";}else{std::cout << std::endl;std::cout << item[i] << " ";}}std::cout << std::endl;}void TestQuickSortC(){const int maxLen = 100;int item[maxLen];for( int i = 0; i < maxLen; i++ ){item[i] = i;}std::random_shuffle( item, item + maxLen );QuickSortC( item, maxLen, sizeof(int), CmpFunc);Output( item, maxLen );}void TestQuickSortCPlus(){const int maxLen = 100;int item[maxLen];for( int i = 0; i < maxLen; i++ ){item[i] = i;}std::random_shuffle( item, item + maxLen );QuickSortCPlus( item, 0, maxLen - 1 );Output( item, maxLen );}#endif
0 0
- 泛型,Quick Sort 的C/C++两种实现方式
- Quick Sort (快速排序 C++)
- C program for quick sort
- C/C++ Quick Sort Algorithm
- 快速排序(quick sort) C ~
- C语言中链表的两种实现方式
- C#Winform实现登陆的两种方式
- Quick Sort的Java实现
- quick sort 的c++实现
- quick sort 的c++实现
- c#Gdi画图的两种方式
- C获取时间的两种方式
- Another C program for quick sort
- C++: quick sort(快排序)
- sort排序的两种方式
- sort排序的两种方式
- 用C和C++,两种方式实现C语言中的printf函数
- 图解排序算法及C语言实现之 ------ 快速排序:Quick Sort
- <算法>递归实现阶乘运算
- 为什么httpclient老是卡住
- linux tar 命令 解压文件到指定目录
- 遍历字典方法:HASH_ITER
- jQuery 请指出'$'和'$.fn'的区别?或者说出'$.fn'的用途。
- 泛型,Quick Sort 的C/C++两种实现方式
- POJ 2993:Emag eht htiw Em Pleh:模拟题
- opencv实践程序6——简单(otsu)的背景差分法
- 加措活佛:幸福在心里
- monkeyrunner学习笔记四(录制和回放)
- IOS UILabel 如何实现随机摆放以及刷新
- 跳转到系统相簿界面,通讯录界面等后标题显示的英文,关键是手机已经设置显示中文了。
- Ubuntu命令入门
- The first time:数据结构作业——自定义链表及其操作