快速排序c++实现及解释
2008-11-18 21:04 Iron 阅读(380) 评论(0) 编辑 收藏 举报#include<iostream>
using namespace std;
template <class T>
int Partition(T a[],int left,int right)
{
int i = left, j = right + 1;
T x = a[left];
/*快排这个核心函数的原理是:
1,保持基准元素不动,从下一个元素开始从左往右找到比基准元素大的,停下;
2,保持基准元素不动,从下一个元素开始从右往左找到比基准元素小的,停下;
3,交换这两个元素的位置。
4,重复步骤(1)(2)(3),直到i与j相遇或错开。
5,将基准元素和最后一个小于基准元素值的元素交换,一次快排结束
*/
for(;;)
{
while(a[++i] < x);
while(a[--j] > x);
if(i >= j) break;
int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
a[left] = a[j];
a[j] = x;
return j;
}
template <class T>
void QuickSort(T a[],int left,int right)
{
if(left < right)
{
//执行快排
int j=Partition(a,left,right);
//按基准元素分为两部分后分别执行快排
QuickSort(a,left,j-1);
QuickSort(a,j+1,right);
}
}
int main()
{
int intArray[5] = { 2 , 5 , 1 , 3 , 4};
QuickSort(intArray, 0, 4);
for(int i = 0; i < 4; i++)
cout << intArray[i] << endl;
return 0;
}
using namespace std;
template <class T>
int Partition(T a[],int left,int right)
{
int i = left, j = right + 1;
T x = a[left];
/*快排这个核心函数的原理是:
1,保持基准元素不动,从下一个元素开始从左往右找到比基准元素大的,停下;
2,保持基准元素不动,从下一个元素开始从右往左找到比基准元素小的,停下;
3,交换这两个元素的位置。
4,重复步骤(1)(2)(3),直到i与j相遇或错开。
5,将基准元素和最后一个小于基准元素值的元素交换,一次快排结束
*/
for(;;)
{
while(a[++i] < x);
while(a[--j] > x);
if(i >= j) break;
int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
a[left] = a[j];
a[j] = x;
return j;
}
template <class T>
void QuickSort(T a[],int left,int right)
{
if(left < right)
{
//执行快排
int j=Partition(a,left,right);
//按基准元素分为两部分后分别执行快排
QuickSort(a,left,j-1);
QuickSort(a,j+1,right);
}
}
int main()
{
int intArray[5] = { 2 , 5 , 1 , 3 , 4};
QuickSort(intArray, 0, 4);
for(int i = 0; i < 4; i++)
cout << intArray[i] << endl;
return 0;
}