快速排序

50 篇文章 0 订阅

先将快速排序的代码放上:

public class QuickSort {





public void quickSort( int[] List, int a, int b){
if(a<b){
int position=partition(List,a,b);

quickSort(List,a,position-1);

quickSort(List,position+1,b);

}
}

public int partition(int[]  List, int a,int b){
//这里边返回第一个数字放在的位置
int temp= List[a];

while(a<b){

while(List[b]>=temp && a<b) b--;

List[a]=List[b];

while(List[a]<=temp && a<b) a++;

List[b]=List[a];

}
 List[a] =temp;

return a;

}


}




public class Test {



public static void main(String args[]){


int[] list={3,4,6,1,2,8,10};

QuickSort qs=new QuickSort();
qs.quickSort(list, 0, list.length-1);

for (int i : list) {
System.out.println(i);
}
}
}



对应输出结果:

1 2 3 4 6 8 10 


之前在写的时候,细节方面把握的不是很到位,在这里把实现的思路再捋一遍。

思想是左右交替的去替换位置,下面举个例子,理解起来会容易些:


初试数组: 3,4,6,1,2,8,10   

          基准数字是3,数组的开头结尾各有一个指针 ,分别记为 i ,  j  ( i用来往后找,j用来往前找)


   先用临时变量暂存第一个数字 3  ,   a 指向第一位,b指向最后一位

   while语句的顺序是很重要的,之前想了很久。一定要先从后数,即计算 b-- 的这个循环。

       在循环的过程中,b 依次指向 10, 8 ,2 。 到达2时候跳出循环,将值赋给a的位置 , 即:

                  2,4,6,1,2,8,10

     然后从前数,进入a 的循环,a 依次指向2,4。  到达4时跳出循环, 将值赋给 b的位置,即:

                  2,4,6,1,4,8,10

     

   以此类推:

                  2,1,6,1,4,8,10

                  2,1,6,6,4,8,10

   截止到现在,外层的循环都走完了,还差一步:             

   最后,将暂存的第一位的数字3 放到a指向的位置,(我理解的是因为第一位的位置是处于比自身小的那一个方向,因此需要跟比它小的一组中最靠右的一个元素交换)

                  2,1,3,6,4,8,10

 

这样第一层走完了,接下来便是调用递归不断的去调整数字的位置直至排出大小顺序。


容易混淆的是交换值的顺序的环节,可能还是需要具体的例子来说明一下会清晰一些。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值