快速排序改进原理及其实现

快速排序是现在计算机中排序算法相对比较快的一种算法,在各类语言中的排序算法大都是快速排序算法

现在我们来讲解一下快速排序的原理及其实现:

快速排序最主要的思想就是,找到一个基准点,然后把大于这个基准点的数放在后面,小于基准点的数放在前面然后根据这个基准点的位置进行递归分别处理前面后后面的数组完成整个递归的过程。大体思路就是这样。

简单明了上代码

	 //快速排序  //改变基准可以改变快排的速度
	 public static void quickSort(int[] arr,int l,int r) {
		 if(l>r) {
			 return;
		 }
		int p = partition1(arr,l,r);
		quickSort(arr,l,p-1);
		quickSort(arr,p+1,r);
	 }

 private static int partition1(int[] arr, int l, int r) {
		 int v = arr[l];
		int i = l+1,j=r;
		while(true) {
			while(i<=r&&arr[i]<v) i++;
			while(j>=l+1&&arr[j]>v) j--;
			if(i>=j) break;
			int temp =arr[i];
			 arr[i]=arr[j];
			 arr[j]=temp;
			 i++;
			 j--;
		}
		int temp =arr[l];
		 arr[l]=arr[j];
		 arr[j]=temp;
		 return j;
	}

在这个算法中还有一些改进的地方,当你在选择基准点的时候如果每次都选择第一个,而且数组又是相对有序的话,那么这个算法的时间复杂度就会降到O(n2),所以在选择基准点的时候我们应该随机的选择基准点,还有就是在进行左右分别处理的时候我们其实可以把等于基准点的数提取处理,不在进行递归处理改进代码如下:

	 public static void devQuickSort(int[] arr,int l,int r) {
		 if(l>r) {
			 return;
		 }
		 int v = arr[l];
		int lt = l;
		int gt = r+1;
		int i =l+1;
		while(i<gt) {
			if(arr[i]>v) {
				int temp =arr[i];
				arr[i]=arr[gt-1];
				arr[gt-1]=temp;
				gt--;
			}else if(arr[i]<v) {
				int temp =arr[i];
				arr[i]=arr[lt+1];
				arr[lt+1]=temp;
				lt++;
				i++;
			}
			else {
				i++;
			}
			
		}
		int temp =arr[l];
		arr[l]=arr[lt];
		arr[lt]=temp;
		devQuickSort(arr,l,lt-1);
		devQuickSort(arr,gt,r);
	 }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值