交换排序--快速排序

来源:互联网 发布:涨价去库存知乎 编辑:程序博客网 时间:2024/05/01 17:07


个人理解快速排序的原理,定义两个标量,一个数的值是数组的第一位下标值(上标量)值为0,另一个是数组最后一位下标值(下标量)值为数组长度减1

首先从数组中选取的下标值为上标量的数,从数组最后一位开始向前比较,遇到第一个比选取值大的数,就交换位置,根据判断标识来判定是 上标量加一,还是下标量减一,

这时候就从数组选取下标值为下标量的数,从数组的下标为上标量的数进行比较,需要进行第一次交换,就交换位置,还是根据判断标识来判定是 上标量加一,还是下标量减

一,直到上标量和下标量的值相等,完成第一趟快速排序,这是数组就变成比最开始从数组选中的下标为上标量的值0小的数在它的前面,反之则在它的后面,分别对这两组进行快速排序,直到最后完成排序结束。


package change.sort;public class QuickSort {public static void main(String[] args) {//声明数组int[] nums = {27,8,57,9,23,41,65,19,0,1,2,4,5};for (int i = 0; i < nums.length; i++) {System.out.print(nums[i]+"\t");}System.out.println();//应用快速排序方法quickSort(nums,0,nums.length-1);//显示排序后的数组for (int i = 0; i < nums.length; i++) {System.out.print(nums[i]+"\t");}}private static void quickSort(int[] a, int lo0, int hi0) {int lo = lo0;//上标int hi = hi0;//下标if(lo>hi){return;}//确定指针方向的逻辑变量boolean transfer = true;while(lo!=hi){if(a[lo]>a[hi]){//交换数字int temp = a[lo];a[lo]=a[hi];a[hi]=temp;//决定下标移动,还是上标移动transfer=(transfer==true)?false:true;}if(transfer){hi--;}else{lo++;}//显示每一次指针移动的数组数字的变化for (int i = 0; i < a.length; i++) {System.out.print(a[i]+",");}System.out.print("(lo,hi)="+"("+lo+","+hi+")");System.out.println("");}//将数组分开两半,确定每个数字的正确位置lo--;hi++;quickSort(a, lo0, lo);quickSort(a, hi, hi0);}}

运行结果:


27857923416519012455,8,57,9,23,41,65,19,0,1,2,4,27,(lo,hi)=(1,12)5,8,57,9,23,41,65,19,0,1,2,4,27,(lo,hi)=(2,12)5,8,27,9,23,41,65,19,0,1,2,4,57,(lo,hi)=(2,11)5,8,4,9,23,41,65,19,0,1,2,27,57,(lo,hi)=(3,11)5,8,4,9,23,41,65,19,0,1,2,27,57,(lo,hi)=(4,11)5,8,4,9,23,41,65,19,0,1,2,27,57,(lo,hi)=(5,11)5,8,4,9,23,27,65,19,0,1,2,41,57,(lo,hi)=(5,10)5,8,4,9,23,2,65,19,0,1,27,41,57,(lo,hi)=(6,10)5,8,4,9,23,2,27,19,0,1,65,41,57,(lo,hi)=(6,9)5,8,4,9,23,2,1,19,0,27,65,41,57,(lo,hi)=(7,9)5,8,4,9,23,2,1,19,0,27,65,41,57,(lo,hi)=(8,9)5,8,4,9,23,2,1,19,0,27,65,41,57,(lo,hi)=(9,9)0,8,4,9,23,2,1,19,5,27,65,41,57,(lo,hi)=(1,8)0,5,4,9,23,2,1,19,8,27,65,41,57,(lo,hi)=(1,7)0,5,4,9,23,2,1,19,8,27,65,41,57,(lo,hi)=(1,6)0,1,4,9,23,2,5,19,8,27,65,41,57,(lo,hi)=(2,6)0,1,4,9,23,2,5,19,8,27,65,41,57,(lo,hi)=(3,6)0,1,4,5,23,2,9,19,8,27,65,41,57,(lo,hi)=(3,5)0,1,4,2,23,5,9,19,8,27,65,41,57,(lo,hi)=(4,5)0,1,4,2,5,23,9,19,8,27,65,41,57,(lo,hi)=(4,4)0,1,4,2,5,23,9,19,8,27,65,41,57,(lo,hi)=(0,2)0,1,4,2,5,23,9,19,8,27,65,41,57,(lo,hi)=(0,1)0,1,4,2,5,23,9,19,8,27,65,41,57,(lo,hi)=(0,0)0,1,4,2,5,23,9,19,8,27,65,41,57,(lo,hi)=(1,2)0,1,4,2,5,23,9,19,8,27,65,41,57,(lo,hi)=(1,1)0,1,2,4,5,23,9,19,8,27,65,41,57,(lo,hi)=(3,3)0,1,2,4,5,8,9,19,23,27,65,41,57,(lo,hi)=(6,8)0,1,2,4,5,8,9,19,23,27,65,41,57,(lo,hi)=(7,8)0,1,2,4,5,8,9,19,23,27,65,41,57,(lo,hi)=(8,8)0,1,2,4,5,8,9,19,23,27,65,41,57,(lo,hi)=(5,6)0,1,2,4,5,8,9,19,23,27,65,41,57,(lo,hi)=(5,5)0,1,2,4,5,8,9,19,23,27,65,41,57,(lo,hi)=(6,6)0,1,2,4,5,8,9,19,23,27,57,41,65,(lo,hi)=(11,12)0,1,2,4,5,8,9,19,23,27,57,41,65,(lo,hi)=(12,12)0,1,2,4,5,8,9,19,23,27,41,57,65,(lo,hi)=(11,11)0124589192327415765




原创粉丝点击