数据结构--八大排序之【快速排序】(思想+代码)

一、思想

1、每次选择待排序数据的第一个元素作为参照物,小的放其前面,大的放其后面

2、一共需要两部分:

(1)函数1:

        找到参照物在一次循环比较之后处于该序列的位置,即参照物当前位置和序列中哪个位置交换

(2)函数2:

        递归快速排序

二、代码

1、递归快速排序

public static void quickSort(int[] a, int start,int end){

  if(start>=end)
     return; //递归结束条件:前后指针相遇
  
  int keyIndex=getIndex(a,start,end); //获得参照物排序后的位置 

  quickSort(a,start,keyIndex-1);  //  《key部分按照快速排序的方式递归排序
  quickSort(a,keyIndex+1,end);  // >key部分

}

2、核心排序部分:找到参照物key排序后的位置

public static int getIndex(int[] a,int start,int end){

  int key =a[start];// 第一个数作为参照物
  int left=start;
  int right=end;
  
  while(left!=right){
    // 无需交换
    while(left<right&&a[right]>key)  right--;
    while(left<right&&a[left]<=key)  left++;
    //当不满足上面无需交换的条件,则在满足基本条件情况下进行交换
    if(left<right){
      int temp=a[left];
      a[left]=a[right];
      a[right]=temp;
    }
   
   
  }
  //跳出排序循环后的处理:将 key换到left和right相撞的位置
  a[start]=a[left];
  a[right]=key;
  return left;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值