//QuicksortAlgorithm.cpp:
#include "stdafx.h"
#include <iostream>
using namespace std;
void quicksort(int* arr,int len);
void quicksort(int* arr,int si, int ei);
int partition(int* arr,int si, int ei);
void swap(int& a, int& b);
void quicksort(int* arr,int len)
{
quicksort(arr,0,len-1);
}//end of quicksort(int* arr,int len)
//si -> start position
//ei -> end position
void quicksort(int* arr,int si, int ei)
{
if( si < ei )
{
int split_pos = partition(arr,si,ei);
if(si<split_pos)
quicksort(arr,si,split_pos-1);
if(ei>split_pos)
quicksort(arr,split_pos+1,ei);
}
}//end of quicksort(int* arr,int si, int ei)
// return -1 if arr is already ordered; otherwise returns the split position
int partition(int* arr,int si, int ei)
{
if(si==ei)
return si;
if(si > ei)
{
cerr<<"Index parameter ERROR: si > ei, in Function /" void partition(int*,int,int) /" "<<endl;
exit(1);
}
int p = arr[si];
int i = si;
int j = ei+1;
int return_val = ei;
while(true)
{
do ++i; while( arr[i] < p && i < ei);
do --j; while( arr[j] > p && j > si);
if(i<j)
swap(arr[i],arr[j]);
else
{
return_val = j;
break;
}
}
if(return_val == j)
swap(arr[si],arr[j]);
return return_val;
}//end of partition()
// swap two elements
void swap(int& a, int& b)
{
if(a == b)
return ;
int temp = a;
a = b;
b = temp;
}
//end of swap();
//end of QuicksortAlgorithm.cpp
Quicksort 快速排序源程序
最新推荐文章于 2022-05-16 22:53:57 发布