排序方法之快速排序

快速排序用到的思想是分治思想,下面以数组A[p,r]为例说明快速排序的过程:

(1)数组经过一定的调整,可以划分为两个子数组,即A[p,q-1]和A[q-1,r],这两个数组满足,A[p,q-1]中的数据都小于等于A[q],而数组A[q-1,r]中的数据都大于A[q],其中计算下表q也是划分过程的一部分

(2)通过递归调用快速排序,对子数组A[p,q-1]和A[q-1,r]进行排序

(3)因为子数组都是原址排序的,因此不需要合并操作,数组A[p,r]已经是有序的

下面用伪代码说明排序的过程:

quicksort(A,p,r)

{

if(p<r)

{

q=partition(A,p,r);

quicksort(A,p,q-1);

quicksort(A,q-1,r)

}

}

partition(A,p,r)

{

x=A[r];

i=p-1;

for(j=0;j<=r-1;j++)

{

if(A[j]<x)

{

i=i+1;

temp=A[i];

A[i]=A[j];

A[j]=temp;

}

}

temp=A[i+1];

temp(i+1)=x;

x=temp(i+1);

return i+1;

}

下面用C++语言给出具体的快速排序的过程:

#include<iostream>
using namespace std;
int partition(int*A,int p,int r);
void quicksort(int*A,int p,int r);
void Display(int *A,int size); 
int main()
{
	int n,*a;
	cout<<"请输入排序的个数:"<<endl;
	cin>>n;
	cout<<"请输入需要排序的数据:"<<endl;
	a=(int*)malloc(n*sizeof(int));
	for(int i=0;i<n;i++)
		cin>>a[i];
	quicksort(a,0,n-1);
	Display(a,n);
	return 0;
}
void quicksort(int *A,int p,int r) //快速排序
{
	int q;
	if(p<r)               //如果p大于等于r 那么就程序不执行,非常重要
	{
		q = partition(A,p,r);  //调用分治法 找到q的值
		cout<<q;
		quicksort(A,p,q-1);
		quicksort(A,q+1,r);
	}
}

int partition(int *A,int p,int r)
{
	int x,i,j,temp;
	x = A[r];
	i = p-1; 
	for(j=p;j<=r-1;j++)
	{
		if(A[j]<x)
		{
			i=i+1;
			temp=A[i];
			A[i]=A[j];
			A[j]=temp;
		}
	}
	temp=A[i+1];
	A[i+1]=A[r];
	A[r]=temp;
	return i+1;
}
void Display(int *A,int size)  //打印函数
{
	    cout<<"排序结果为:"<<endl;
		for(int i=0; i<size; i++)    //打印数组
		{
			cout<<A[i]<<" ";
		}
		cout<<endl;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值