Java快速排序算法 发表于 2018-03-12 | Edited on 2018-10-12 | Comments: | Views: 来一个Java版本的快速排序。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657public class QuickSort { public static void main(String[] args) { int[] arr = {5, 2, 4, 7, 1, 8, 3, 4}; printArray(arr); quickSort(arr, 0, arr.length - 1); printArray(arr); } static void quickSort(int[] arr, int i, int j) { if (i < j) { int pos = partition(arr, i, j); printArray(arr); System.out.println("分别排左边和右边"); quickSort(arr, 0, pos - 1); quickSort(arr, pos + 1, j); } } static int partition(int[] arr, int i, int j) { int pivot = arr[j]; System.out.println("基准值:" + pivot); int cursor = i; System.out.println("游标:" + cursor); for (int k = i; k < j; k++) { System.out.println("循环到第[" + k + "]个值"); if (arr[k] <= pivot) { System.out.println("交换位置[" + cursor + "]与[" + k + "]的值"); swap(arr, k, cursor); cursor += 1; } System.out.print("循环完成后:"); printArray(arr); System.out.println("游标:" + cursor); } System.out.println("交换位置[" + cursor + "]与[" + j + "]的值"); swap(arr, j, cursor); System.out.println("游标:" + cursor); return cursor; } static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } static void printArray(int[] arr) { StringBuilder sb = new StringBuilder(); for (int anArr : arr) { sb.append(anArr).append(" "); } System.out.println(sb.toString().trim()); }} 输出如下: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642655 2 4 7 1 8 3 4基准值:4游标:0循环到第[0]个值循环完成后:5 2 4 7 1 8 3 4游标:0循环到第[1]个值交换位置[0]与[1]的值循环完成后:2 5 4 7 1 8 3 4游标:1循环到第[2]个值交换位置[1]与[2]的值循环完成后:2 4 5 7 1 8 3 4游标:2循环到第[3]个值循环完成后:2 4 5 7 1 8 3 4游标:2循环到第[4]个值交换位置[2]与[4]的值循环完成后:2 4 1 7 5 8 3 4游标:3循环到第[5]个值循环完成后:2 4 1 7 5 8 3 4游标:3循环到第[6]个值交换位置[3]与[6]的值循环完成后:2 4 1 3 5 8 7 4游标:4交换位置[4]与[7]的值游标:42 4 1 3 4 8 7 5分别排左边和右边基准值:3游标:0循环到第[0]个值交换位置[0]与[0]的值循环完成后:2 4 1 3 4 8 7 5游标:1循环到第[1]个值循环完成后:2 4 1 3 4 8 7 5游标:1循环到第[2]个值交换位置[1]与[2]的值循环完成后:2 1 4 3 4 8 7 5游标:2交换位置[2]与[3]的值游标:22 1 3 4 4 8 7 5分别排左边和右边基准值:1游标:0循环到第[0]个值循环完成后:2 1 3 4 4 8 7 5游标:0交换位置[0]与[1]的值游标:01 2 3 4 4 8 7 5分别排左边和右边基准值:5游标:5循环到第[5]个值循环完成后:1 2 3 4 4 8 7 5游标:5循环到第[6]个值循环完成后:1 2 3 4 4 8 7 5游标:5交换位置[5]与[7]的值游标:51 2 3 4 4 5 7 8分别排左边和右边基准值:4游标:0循环到第[0]个值交换位置[0]与[0]的值循环完成后:1 2 3 4 4 5 7 8游标:1循环到第[1]个值交换位置[1]与[1]的值循环完成后:1 2 3 4 4 5 7 8游标:2循环到第[2]个值交换位置[2]与[2]的值循环完成后:1 2 3 4 4 5 7 8游标:3循环到第[3]个值交换位置[3]与[3]的值循环完成后:1 2 3 4 4 5 7 8游标:4交换位置[4]与[4]的值游标:41 2 3 4 4 5 7 8分别排左边和右边基准值:4游标:0循环到第[0]个值交换位置[0]与[0]的值循环完成后:1 2 3 4 4 5 7 8游标:1循环到第[1]个值交换位置[1]与[1]的值循环完成后:1 2 3 4 4 5 7 8游标:2循环到第[2]个值交换位置[2]与[2]的值循环完成后:1 2 3 4 4 5 7 8游标:3交换位置[3]与[3]的值游标:31 2 3 4 4 5 7 8分别排左边和右边基准值:3游标:0循环到第[0]个值交换位置[0]与[0]的值循环完成后:1 2 3 4 4 5 7 8游标:1循环到第[1]个值交换位置[1]与[1]的值循环完成后:1 2 3 4 4 5 7 8游标:2交换位置[2]与[2]的值游标:21 2 3 4 4 5 7 8分别排左边和右边基准值:2游标:0循环到第[0]个值交换位置[0]与[0]的值循环完成后:1 2 3 4 4 5 7 8游标:1交换位置[1]与[1]的值游标:11 2 3 4 4 5 7 8分别排左边和右边基准值:8游标:6循环到第[6]个值交换位置[6]与[6]的值循环完成后:1 2 3 4 4 5 7 8游标:7交换位置[7]与[7]的值游标:71 2 3 4 4 5 7 8分别排左边和右边基准值:7游标:0循环到第[0]个值交换位置[0]与[0]的值循环完成后:1 2 3 4 4 5 7 8游标:1循环到第[1]个值交换位置[1]与[1]的值循环完成后:1 2 3 4 4 5 7 8游标:2循环到第[2]个值交换位置[2]与[2]的值循环完成后:1 2 3 4 4 5 7 8游标:3循环到第[3]个值交换位置[3]与[3]的值循环完成后:1 2 3 4 4 5 7 8游标:4循环到第[4]个值交换位置[4]与[4]的值循环完成后:1 2 3 4 4 5 7 8游标:5循环到第[5]个值交换位置[5]与[5]的值循环完成后:1 2 3 4 4 5 7 8游标:6交换位置[6]与[6]的值游标:61 2 3 4 4 5 7 8分别排左边和右边基准值:5游标:0循环到第[0]个值交换位置[0]与[0]的值循环完成后:1 2 3 4 4 5 7 8游标:1循环到第[1]个值交换位置[1]与[1]的值循环完成后:1 2 3 4 4 5 7 8游标:2循环到第[2]个值交换位置[2]与[2]的值循环完成后:1 2 3 4 4 5 7 8游标:3循环到第[3]个值交换位置[3]与[3]的值循环完成后:1 2 3 4 4 5 7 8游标:4循环到第[4]个值交换位置[4]与[4]的值循环完成后:1 2 3 4 4 5 7 8游标:5交换位置[5]与[5]的值游标:51 2 3 4 4 5 7 8分别排左边和右边基准值:4游标:0循环到第[0]个值交换位置[0]与[0]的值循环完成后:1 2 3 4 4 5 7 8游标:1循环到第[1]个值交换位置[1]与[1]的值循环完成后:1 2 3 4 4 5 7 8游标:2循环到第[2]个值交换位置[2]与[2]的值循环完成后:1 2 3 4 4 5 7 8游标:3循环到第[3]个值交换位置[3]与[3]的值循环完成后:1 2 3 4 4 5 7 8游标:4交换位置[4]与[4]的值游标:41 2 3 4 4 5 7 8分别排左边和右边基准值:4游标:0循环到第[0]个值交换位置[0]与[0]的值循环完成后:1 2 3 4 4 5 7 8游标:1循环到第[1]个值交换位置[1]与[1]的值循环完成后:1 2 3 4 4 5 7 8游标:2循环到第[2]个值交换位置[2]与[2]的值循环完成后:1 2 3 4 4 5 7 8游标:3交换位置[3]与[3]的值游标:31 2 3 4 4 5 7 8分别排左边和右边基准值:3游标:0循环到第[0]个值交换位置[0]与[0]的值循环完成后:1 2 3 4 4 5 7 8游标:1循环到第[1]个值交换位置[1]与[1]的值循环完成后:1 2 3 4 4 5 7 8游标:2交换位置[2]与[2]的值游标:21 2 3 4 4 5 7 8分别排左边和右边基准值:2游标:0循环到第[0]个值交换位置[0]与[0]的值循环完成后:1 2 3 4 4 5 7 8游标:1交换位置[1]与[1]的值游标:11 2 3 4 4 5 7 8分别排左边和右边1 2 3 4 4 5 7 8 打赏 微信支付 支付宝