写一下快速排序
public class QuickSort { public static void main(String[] args) { int[] arr={4,7,3,5,6,2,8,1}; qSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } /** * 快速排序 * 首先选取当前排序数组的最左边的元素作为基准值, * 然后取当前数组最右边的元素和基准值进行比较, * 如果比基准值大,那么右侧游标向左移一位,继续比较 * 直到比较出右边的元素比基准值小,那么和基准值做交换,左边的游标向右移动一位 * 接着比较左边的游标对应的元素和基准值,如果比基准值小,则做游标继续向右移一位 * 直到比较出比基准值大的元素,那么将左游标对应的元素和此时右游标的基准值进行交换, * 继续下一轮右游标比较,直到左右游标相等,说明此时左右游标对应的基准值,左边都是比基准值小的元素,右边都是比基准值大的元素 * 递归左边数组和右边数组。 * @param data * @param left * @param right */ public static void qSort(int[] data,int left ,int right){ int base = data[left]; int lPoint = left; int rPoint = right; while(lPoint < rPoint){ while(lPoint < rPoint && data[rPoint] >= base){ rPoint--; } if(lPoint<rPoint){ int temp = data[rPoint]; data[rPoint] = data[lPoint]; data[lPoint] = temp; lPoint++; } while(lPoint < rPoint && data[lPoint] <= base){ lPoint++; } if(lPoint < rPoint){ int temp = data[rPoint]; data[rPoint] = data[lPoint]; data[lPoint] = temp; rPoint--; } } if(left<lPoint){ qSort(data,left,lPoint-1); } if(lPoint<right){ qSort(data,lPoint+1,right); } } }
本人倡导的讲解方式:代码示例[学以致用,不仅要知道理论,还要知道理论怎么付诸实践],
文字讲解[不仅知道要怎么用,还要知道是怎么回事],
画图讲解[有图有真相,用图的形式将代码嵌入到理论中,整体理解]