基本思想是任取待排序对象序列中的某个对象 (例如取第一个对象) 作为基准, 按照该对象的排序码大小,将整个对象序列划分为左右两个子序列:
左侧子序列中所有对象的排序码都小于或等于基准对象的排序码
P.S.文章不妥之处还望指正
左侧子序列中所有对象的排序码都小于或等于基准对象的排序码
右侧子序列中所有对象的排序码都大于基准对象的排序码
一趟快速排序的具体做法是:
设两个指针low和high,设枢轴记录的关键字为pivotkey。
首先从high所指位置起向前搜索找到第一个关键字小于pivotkey的记录和枢轴记录互相交换,然后从low所指位置起向后搜索,找到第一个关键字大于pivotkey的记录和枢轴记录互相交换,重复这两步直至low=high为止
QuickSort.cpp
#include <iostream>
using namespace std;
int partion(int arr[],int low,int high)
{
//arr[0] = arr[low];
while(low<high)
{
while(low<high&&arr[high]>=arr[low])
high--;
int temp1 = arr[low];
arr[low] = arr[high];
arr[high] = temp1;
while(low<high&&arr[low]<=arr[high])
low++;
int temp2 = arr[low];
arr[low] = arr[high];
arr[high] = temp2;
}
//arr[low] = arr[0];
return low;
}
int QuickSort(int arr[],int low,int high)
{
int flag = partion(arr,low,high);
if(low<high)
{
QuickSort(arr,low,flag-1);
QuickSort(arr,flag+1,high);
}
}
int main()
{
int n;
int arr [1000];
cin >> n;
for(int i = 0 ; i < n; i++)
{
cin>>arr[i];
}
int j,k;
QuickSort(arr,0,n);
for(int i = 0 ; i < n; i++)
{
cout<<arr[i]<<" ";
}
return 0;
}
P.S.文章不妥之处还望指正