快速排序

来源:互联网 发布:2k18詹姆斯身体数据 编辑:程序博客网 时间:2024/06/06 16:47
package sort;public class myQuickSort {public static void main(String[] args) {int array[] = { 5, 3, 8, 6, 13, 24, 9, 5, 21, 17, 3, 16, -3 };quickSort(array, 0, array.length - 1);ArrayUtils.printArray(array);}public static int getmiddle(int[] array, int left, int right) {int temp = array[left];while (left < right) {while (left < right && array[right] >= temp)right--;System.out.println("从右到左结束,此时right=" + right + " ," + array[right]+ "小于temp:" + temp + ",或者left=right了,将第" + (left + 1)+ "个元素" + array[left] + "赋值为" + array[right]);array[left] = array[right];ArrayUtils.printArray(array);while (left < right && array[left] <= temp)left++;System.out.println("从左到右结束,此时left=" + left + " ," + array[left]+ "大于temp:" + temp + ",或者left=right了,将第" + (right + 1)+ "个元素" + array[right] + "赋值为" + array[left]);array[right] = array[left];ArrayUtils.printArray(array);}System.out.println("将第" + (left + 1) + "个元素" + array[left] + "赋值为temp"+ temp);array[left] = temp;ArrayUtils.printArray(array);return left;}// 为getmiddle的纯净版,无中间输出结果public static int getmiddle1(int[] array, int left, int right) {int temp = array[left];while (left < right) {while (left < right && array[right] >= temp)right--;array[left] = array[right];while (left < right && array[left] <= temp)left++;array[right] = array[left];}array[left] = temp;return left;}public static void quickSort(int[] array, int left, int right) {if (array.length <= 1)return;if (left < right) {int mid = getmiddle(array, left, right);quickSort(array, left, mid - 1);quickSort(array, mid + 1, right);}}}

带中间详细输出的结果如下:

从右到左结束,此时right=12 ,-3小于temp:5,或者left=right了,将第1个元素5赋值为-3{-3, 3, 8, 6, 13, 24, 9, 5, 21, 17, 3, 16, -3}从左到右结束,此时left=2 ,8大于temp:5,或者left=right了,将第13个元素-3赋值为8{-3, 3, 8, 6, 13, 24, 9, 5, 21, 17, 3, 16, 8}从右到左结束,此时right=10 ,3小于temp:5,或者left=right了,将第3个元素8赋值为3{-3, 3, 3, 6, 13, 24, 9, 5, 21, 17, 3, 16, 8}从左到右结束,此时left=3 ,6大于temp:5,或者left=right了,将第11个元素3赋值为6{-3, 3, 3, 6, 13, 24, 9, 5, 21, 17, 6, 16, 8}从右到左结束,此时right=3 ,6小于temp:5,或者left=right了,将第4个元素6赋值为6{-3, 3, 3, 6, 13, 24, 9, 5, 21, 17, 6, 16, 8}从左到右结束,此时left=3 ,6大于temp:5,或者left=right了,将第4个元素6赋值为6{-3, 3, 3, 6, 13, 24, 9, 5, 21, 17, 6, 16, 8}将第4个元素6赋值为temp5{-3, 3, 3, 5, 13, 24, 9, 5, 21, 17, 6, 16, 8}从右到左结束,此时right=0 ,-3小于temp:-3,或者left=right了,将第1个元素-3赋值为-3{-3, 3, 3, 5, 13, 24, 9, 5, 21, 17, 6, 16, 8}从左到右结束,此时left=0 ,-3大于temp:-3,或者left=right了,将第1个元素-3赋值为-3{-3, 3, 3, 5, 13, 24, 9, 5, 21, 17, 6, 16, 8}将第1个元素-3赋值为temp-3{-3, 3, 3, 5, 13, 24, 9, 5, 21, 17, 6, 16, 8}从右到左结束,此时right=1 ,3小于temp:3,或者left=right了,将第2个元素3赋值为3{-3, 3, 3, 5, 13, 24, 9, 5, 21, 17, 6, 16, 8}从左到右结束,此时left=1 ,3大于temp:3,或者left=right了,将第2个元素3赋值为3{-3, 3, 3, 5, 13, 24, 9, 5, 21, 17, 6, 16, 8}将第2个元素3赋值为temp3{-3, 3, 3, 5, 13, 24, 9, 5, 21, 17, 6, 16, 8}从右到左结束,此时right=12 ,8小于temp:13,或者left=right了,将第5个元素13赋值为8{-3, 3, 3, 5, 8, 24, 9, 5, 21, 17, 6, 16, 8}从左到右结束,此时left=5 ,24大于temp:13,或者left=right了,将第13个元素8赋值为24{-3, 3, 3, 5, 8, 24, 9, 5, 21, 17, 6, 16, 24}从右到左结束,此时right=10 ,6小于temp:13,或者left=right了,将第6个元素24赋值为6{-3, 3, 3, 5, 8, 6, 9, 5, 21, 17, 6, 16, 24}从左到右结束,此时left=8 ,21大于temp:13,或者left=right了,将第11个元素6赋值为21{-3, 3, 3, 5, 8, 6, 9, 5, 21, 17, 21, 16, 24}从右到左结束,此时right=8 ,21小于temp:13,或者left=right了,将第9个元素21赋值为21{-3, 3, 3, 5, 8, 6, 9, 5, 21, 17, 21, 16, 24}从左到右结束,此时left=8 ,21大于temp:13,或者left=right了,将第9个元素21赋值为21{-3, 3, 3, 5, 8, 6, 9, 5, 21, 17, 21, 16, 24}将第9个元素21赋值为temp13{-3, 3, 3, 5, 8, 6, 9, 5, 13, 17, 21, 16, 24}从右到左结束,此时right=7 ,5小于temp:8,或者left=right了,将第5个元素8赋值为5{-3, 3, 3, 5, 5, 6, 9, 5, 13, 17, 21, 16, 24}从左到右结束,此时left=6 ,9大于temp:8,或者left=right了,将第8个元素5赋值为9{-3, 3, 3, 5, 5, 6, 9, 9, 13, 17, 21, 16, 24}从右到左结束,此时right=6 ,9小于temp:8,或者left=right了,将第7个元素9赋值为9{-3, 3, 3, 5, 5, 6, 9, 9, 13, 17, 21, 16, 24}从左到右结束,此时left=6 ,9大于temp:8,或者left=right了,将第7个元素9赋值为9{-3, 3, 3, 5, 5, 6, 9, 9, 13, 17, 21, 16, 24}将第7个元素9赋值为temp8{-3, 3, 3, 5, 5, 6, 8, 9, 13, 17, 21, 16, 24}从右到左结束,此时right=4 ,5小于temp:5,或者left=right了,将第5个元素5赋值为5{-3, 3, 3, 5, 5, 6, 8, 9, 13, 17, 21, 16, 24}从左到右结束,此时left=4 ,5大于temp:5,或者left=right了,将第5个元素5赋值为5{-3, 3, 3, 5, 5, 6, 8, 9, 13, 17, 21, 16, 24}将第5个元素5赋值为temp5{-3, 3, 3, 5, 5, 6, 8, 9, 13, 17, 21, 16, 24}从右到左结束,此时right=11 ,16小于temp:17,或者left=right了,将第10个元素17赋值为16{-3, 3, 3, 5, 5, 6, 8, 9, 13, 16, 21, 16, 24}从左到右结束,此时left=10 ,21大于temp:17,或者left=right了,将第12个元素16赋值为21{-3, 3, 3, 5, 5, 6, 8, 9, 13, 16, 21, 21, 24}从右到左结束,此时right=10 ,21小于temp:17,或者left=right了,将第11个元素21赋值为21{-3, 3, 3, 5, 5, 6, 8, 9, 13, 16, 21, 21, 24}从左到右结束,此时left=10 ,21大于temp:17,或者left=right了,将第11个元素21赋值为21{-3, 3, 3, 5, 5, 6, 8, 9, 13, 16, 21, 21, 24}将第11个元素21赋值为temp17{-3, 3, 3, 5, 5, 6, 8, 9, 13, 16, 17, 21, 24}从右到左结束,此时right=11 ,21小于temp:21,或者left=right了,将第12个元素21赋值为21{-3, 3, 3, 5, 5, 6, 8, 9, 13, 16, 17, 21, 24}从左到右结束,此时left=11 ,21大于temp:21,或者left=right了,将第12个元素21赋值为21{-3, 3, 3, 5, 5, 6, 8, 9, 13, 16, 17, 21, 24}将第12个元素21赋值为temp21{-3, 3, 3, 5, 5, 6, 8, 9, 13, 16, 17, 21, 24}{-3, 3, 3, 5, 5, 6, 8, 9, 13, 16, 17, 21, 24}


0 0
原创粉丝点击