快速排序法(Quick_sort)详解
快速排序法(Quick_sort)详解快速排序法与其他排序如冒泡排序法、插入排序法、选择排序法有所不同,它不是用相邻元素两两比较使大数不断下沉或者小数不断上浮。而是用一个元素做界限,数值比它大的元素分为一组,数值小于它的元素分为另一组,至于两个组内的元素排列顺序它并不关注。做好这两个组后,利用递归法,对这两个数值一大一小的两部分以一个元素为界限再次分组。这样不断细分下去,元素最后做到有序。现在上代码:
void quick_sort(int a[],int low,int high)
{
if(low >= high)
return;
int i = low,j = high,k = a[i];
while( i < j ) //k一般取数组的第一个元素
{
while(i<j && a[j] >= k)
j--; //利用循环,由后向前检查元素的值,直到遇见比k小的数
if(i<j) a[i] = a[j]; //把这个元素交换到k的前面
while(i<j && a[i] <= k)
i++; //利用循环,由前向后检查元素的值,直到遇见比k大的数
if(i<j) a[j] = a[i]; //把这个元素交换到k的后面
}
print_arr(a,high+1);
a[i] = k; //a[i]在前面交换中已经被覆盖现在恢复它,目前i与j是相等的
quick_sort(a,low,i-1); //利用递归再分组……
quick_sort(a,i+1,high);
}
//现在把程序完整代码附在下面
#include <iostream>
using namespace std;
void print_arr(int a[],int n)
{
for(int i=0;i<n;i++){
if(i>0)
cout<<' ';
cout<<a[i];
}
}
void quick_sort(int a[],int low,int high)
{
if(low >= high)
return;
int i = low,j = high,k = a[i];
while( i < j )
{
while(i<j && a[j] >= k)
j--;
if(i<j) a[i] = a[j];
while(i<j && a[i] <= k)
i++;
if(i<j) a[j] = a[i];
}
a[i] = k;
quick_sort(a,low,i-1);
quick_sort(a,i+1,high);
}
int main()
{
int a[]={22,18,43,56,97,88,69};
int n=sizeof a/sizeof a[0];
quick_sort(a,0,n-1);
print_arr(a,n);
return 0;
}