快速排序算法

快速排序算法:是建立在普通排序冒泡排序的基础上的排序,也使用递归,更加能快速和有效的对数据进行排序,与普通与冒泡排序不同的是,快速排序算法中多了分区,就是比大小在分区。

特点:会比一般的排序方法更节省时间。

接下来给大家说说快速排序的原理:

首先我们有不同的一组数据,大小是打乱的,要怎样用快速排序的方式来排序呢?

挖坑的方法:

1大部分情况下就将第一个数设为准基数,在准基数下面挖一个坑,我们就将5设为准基数

2由后向前找,如果这个数比准基数小,找到这个数挖出来放到前一个坑中去。

3由前向后找,如果这个数比准基数大,找到这个数挖出来放到前一个坑中去。

比如:


我们从最右边向左边找,从8开始找,与准基数比较,如果找到的数比准基数(5)小,这个数就会形成一个坑,如果比准基数(5)大则过,8比准基数大,过,0比准基数小,形成一个坑:



按照挖坑的方法,由后向前找,如果这个数比准基数小,找到这个数挖出来放到前一个坑中去。就是是0放到前一个坑去,而5准基数所在的坑就是前一个坑,所以就是0这个数放到5这个坑里面



由后向前找,如果这个数比准基数小,找到这个数挖出来放到前一个坑中去


在从由前向后找,如果这个数比准基数大,找到这个数挖出来放到前一个坑中去。从7开始找,如果比准基数大就挖坑,放到前一个坑中去,



以此类推:最后就能排序出来。

以下是关于图片的代码:

package com.Zking.quick;
//快速排序的实现代码
public class Quicksort {
  public static void  querysort(int [] arr,int start,int end) {
	  //分区索引位
	  if(start < end) { 
		  int index=getIndex(arr,start,end);
		  querysort(arr, 0,index-1);
		  querysort(arr, index+1,end);
	  }
  }
  public static int getIndex(int [] arr,int start,int end) {
	  int i=start,j=end;
	  //挖第一个坑位
	  int x=arr[i];//x是基准数
	  
	  while(i<j) {
		//从右边到左边对比,比较小于X的数
		  while(i<j && arr[j]>=x) {
			  j--; 
		  }  
		  
		  if(i<j) {
			  //把找到的元素存在第一个坑位
			  arr[i]=arr[j];
			  i++;
		  }
		  //从左边到右边对比,大于等于X的数
		  while(i<j && arr[i]<x) {
			  i++;
		  }if(i<j) {
			  arr[j]=arr[i];
			  j--;
		  }
		  
	  }
	  arr[i]=x;
	  return i;
  }
  //调用方法
  public static void main(String[] args) {
	  int [] arr={5, 3, 9, 1, 6, 7, 2, 4, 0, 8};
	  querysort(arr,0,arr.length-1);
	  for (int i : arr) {
		System.out.println(i);
	}
}
我添加的数组
{5, 3, 9, 1, 6, 7, 2, 4, 0, 8};

运行结果:

以下是我的见解,有不足的地方多多指教!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值