快速排序QuickSort
根据清华大学出版社出版的算法设计与分析(第2版)王红梅 胡明 编著
//快速排序 QuickSort 模板
#include <iostream>
using namespace std;
//对数组划分 ,返回确定数据的位置
int partition(int arr[],int low,int high){
int i= low; //第一个数
int j = high; //最后一个数
while( i < j) //循环 ,一次排序
{
// 右边缩进,通过一次循环将所有不满足的跳过,下一次肯定需要交换
while( i < j && arr[i] <= arr[j]) j--;
if(i < j) swap(arr[i],arr[j]); //进行交换
// 左边缩进, 通过一次循环将所有不满足的跳过,下一次肯定需要交换
while( i < j && arr[i] <= arr[j]) i++;
if(i < j) swap(arr[i],arr[j]); //进行交换
}
return i;
}
void quick_sort(int arr[],int i,int j)
{
int piovt;
if(i < j)
{
piovt = partition(arr,i,j); //划分
quick_sort(arr,i,piovt-1);
quick_sort(arr,piovt+1,j);
}
}
int main(int argc, char** argv) {
int n;
cin >> n;
int arr[n];
// C++中没有直接获取数组长度的方法
int length = sizeof(arr)/sizeof(arr[0]);
for(int i = 0; i < length; i++)
{
cin >> arr[i];
}
quick_sort(arr,0,4);
for(int i = 0; i < length; i++)
{
cout << arr[i] << " ";
}
return 0;
}
对代码进行缩写
int partition(int arr[],int i,int j)
{
while (i < j)
{
while(i < j && arr[i] <= arr[j]) j--;
if(i < j) swap(arr[i], arr[j]);
while(i < j && arr[i] <= arr[j]) i++;
if(i < j) swap(arr[i], arr[j]);
}
return i;
}
void quick_sort(int arr[],int low,int high)
{
if(low < high){
int piovt = partition(arr,low,high);
quick_sort(arr,low,piovt-1);
quick_sort(arr,piovt+1,high);
}
}