一趟快速排序(划分)是指将待排序记录按照枢轴(通常为第一个记录)分为两个子序列,使得一个子序列的值<=pivot<=第二个子序列
#include<iostream>
using namespace std;
void swap(int *a1, int *a2)
{
int tmp;
tmp = *a1;
*a1 = *a2;
*a2 = tmp;
}
int Partition(int a[], int low, int high)
{
int pivotkey = a[low];
while(low<high) {
while(low<high&&a[high]>=pivotkey) high--;
swap(a[low], a[high]);
while(low<high&&a[low]<=pivotkey) low++;
swap(a[low],a[high]);
}
return low;
}
void QSort(int a[], int low, int high) {
if(low<high) {
int pivotloc = Partition(a,low,high);
QSort(a,low,pivotloc-1);
QSort(a,pivotloc+1,high);
}
}
int main()
{
int a[] = {38, 2, 33, 45, 4};
/*
cout << a[0] << ", " << a[1] << endl;
swap(a[0], a[1]);
cout << a[0] << ", " << a[1] << endl;
*/
QSort(a,0,sizeof(a)/sizeof(int)-1);
for(int i=0; i<sizeof(a)/sizeof(int); i++) {
cout << a[i] << " ";
}
return 1;
}
aa: a.o
g++ -o aa a.o
a.o: a.cpp
g++ -c a.cpp
clean:
rm a.o