快速排序

it2022-05-05  104

#include <iostream> using namespace std; /* 快速排序 ** 思想:采用了分治策略,选用数组任一记录(一般为第一个)为Pivot ** 根据这个Pivot,将数组分为左、右两个较小的子区间,且左边记录的关键字 ** 均小于等于Pivot的关键字,右边记录的关键字均大于等于Pivot的关键字 ** 以此思想递归之。 ** 注:Pivot可翻译为支点 */ int a[] = { 49, 38, 65, 97, 76, 13, 27, 49 }; void swap( int & lValue, int & rValue ) { int temp = lValue; lValue = rValue; rValue = temp; return; } // 一次划分 int Partition( int * Sq, int low, int high ) { int pivotkey = Sq[low]; while ( low < high ) { while ( low < high && Sq[high] >= pivotkey ) { --high; } swap( Sq[low], Sq[high] ); while ( low < high && Sq[low] <= pivotkey ) { ++low; } swap( Sq[low], Sq[high] ); } return low; } // 更高效率的划分 int Partition1( int * Sq, int low, int high ) { int temp = Sq[low]; int pivotkey = Sq[low]; while ( low < high ) { while ( low < high && Sq[high] >= pivotkey ) { --high; } Sq[low] = Sq[high]; while ( low < high && Sq[low] <= pivotkey ) { ++low; } Sq[high] = Sq[low]; } Sq[low] = temp; return low; } void QSort( int * Sq, int low, int high ) { if ( low < high ) { int pivotloc = Partition1( Sq, low, high ); QSort( Sq, low, pivotloc - 1 ); QSort( Sq, pivotloc + 1, high ); } return; } int main() { QSort( a, 0, 7 ); for ( int i = 0; i < 8; ++i ) { cout << a[i] << endl; } return 0; }

转载于:https://www.cnblogs.com/c007136/archive/2012/04/25/2470730.html


最新回复(0)