今天忽然想寫個排序,之前寫過,而後寫了以後一直出錯,而後本身百度了一下,看了別人寫的方法,本身也嘗試着寫了一個。接下來我來講明快速排序的思路以及實現的代碼。數組
快速排序思路:首先是定義一個變量key,把數組的第一個元素的值賦給key,而後定義兩個變量start,end指向數組的第一個元素和最後一個元素。而後從後往前遍歷,一直end--,知道下標爲end的值小於key,就交換下標爲start,end的值,而後再從前遍歷,一直start++,直到下標爲start的值大於key,就交換下標爲start,end的值。這樣,通過一次排序以後,小於key的出如今key的左邊,大於key的出如今key的右邊。而後再用遞歸對key的左右兩邊進行上述方法進行排序。ui
快速排序spa
代碼:指針
//判斷數組是否爲空,數組元素是否爲0 if (data.length < 1 || data == null) { return; } //頭指針小於尾指針,則返回 if (start >= end) { return; } //數組不爲空且元素個數大於0 boolean flag = true; int low = start; int high = end; int key = data[low]; while (low < high) { //flag用來判斷是否從下標爲high的值與基準進行比較 if (flag) { if (data[high] < key) { swmp(data, low, high); flag = false; } else { high--; } } else { //判斷下標爲low的值是否與基準進行比較。 if (data[low] > key) { swmp(data, low, high); flag = true; } else { low++; } } } soft_quick(data, start, low - 1); soft_quick(data, high + 1, end); int temp = data[start]; data[start] = data[end]; data[end] = temp; for (int index : data) { System.out.print(index + "\t"); } System.out.println();
最後是運行結果:code