(算法导论)快速排序

快速排序(算法导论)

  1. 算法思想
    一个单向的指针来对数组进行遍历:
    (1)首先将第一元素设置为基准元素,初始化i=low, j=low+1
    (2)利用j从第二个元素开始与基准元素比较,如果大于基准元素则什么都不执行,如果小于基准元素,则i++,并将其与前面较大的元素进行交换(A[i]和A[j]交换)
    (3)继续使用同样的方法遍历下面的元素,遍历结束后,再将基准元素放到中间位置(A[i]和A[low]交换)
    (4)接着递归调用排列两个子序列,直至整个序列有序。
  2. 划分函数伪代码
    在这里插入图片描述
  3. 快速排序的伪代码
    在这里插入图片描述
  4. java代码实现

	//交换数组中两个元素的方法
	public static void swap(int a[], int i, int j)
	{
		int t = a[i];
		a[i] = a[j];
		a[j] = t;
	}
	public static int  split(int a[],int low ,int high) {
		int x=a[low];
		int i=low;
		for (int j = low+1; j<=high; j++) {
			if(a[j]<=x) {
				i++;
				//交换
				swap(a, i, j);
			}
		}
		swap(a, low, i);
		return i;
	}
	public static void sort(int a[],int low,int high) {
		int q=split(a, low, high);
		if(low<high) {
			sort(a,low,q-1);
			sort(a,q+1, high);
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值