1、定義int left = start,right = end;再定義乙個標誌位 boolen flag=true。
2、在迴圈體中比較,只要left!=right,就進行比較。
3、剛開始將最左邊數最為基準數basenumber = arr[left],將基準數basenumber逐一與右邊倒序比較,直到basenumber值大於右邊邊某個值時進行交換,同時改變標誌位為false。不滿足則 right-- ,直到滿足為止或者 left=right退出循體。
4、接著第三步,標誌位變為false之後,basenumber值被固定在右邊邊某個值,將basenumber逐一與左邊順序比較,直到basenumber值小於左邊某個值時進行交換,同時將變標誌位重置為true,不滿足則 left++,直到滿足為止或者 left=right退出迴圈體。
5、實現**如下:
package com.algorithm.tiger;
/** * @description: 快速排序
* @author: tiger
* @create: 2017-07-28 19:12
*/public class quicksort ;
quicksort1(arr, 0, arr.length - 1);
for (int left : arr)
}public static int quicksort1(int arr, int start, int end)
int left = start, right = end;
//基準數
int basenumber = arr[left];
//翻轉位
//當跑到left=right時退出
while (left != right)
//基準位歸位
arr[start] = arr[left];
arr[left] = basenumber;
//遞迴處理左邊部分
quicksort(arr, start, left - 1);
//遞迴處理右邊部分
quicksort(arr, left + 1, end);
return arr;
}public static int quicksort(int arr, int start, int end)
int left = start, right = end;
//基準數
int basenumber = arr[left];
//翻轉位
boolean flag = true;
//當跑到left=right時退出
while (left != right) else
} else else }}
//flag = true
quicksort(arr, start, right - 1);
//flag = false
quicksort(arr, left + 1, end);
return arr;
}private static void swap(int arr, int left, int right)
}
簡單快速排序
最近,開始認真學習演算法,為了更好的督促自己學習,也請大家幫忙監督,所以列了出來,歡迎批評指正。第乙個是選擇排序 選擇排序的基本思想是 設有n個元素要排序,首先選擇最大的元素與第乙個元素交換,然後再對剩餘的n 1個元素進行類似處理,這樣重複n 1次後,即可將n個元素按由大到小的順序排列。若由小到大排...
簡單理解的快速排序
快速排序就是c.r.a.hoare 於 1962年提出一種劃分交換排序,它採用了分治的策略,通常稱其為分治法。分治法的基本意思是 將原問題分解為若干規模更小但結構與原問題相似的子問題,遞迴地解答這些子問題,然後將這些子問題的解組合為原問題的解。快速排序的基本思想是 假設當前待排序的無序區為 a lo...
快速排序的簡單分析
快速排序有很多版本,這裡給出一種基礎版本和一種典型加強版本,即三數取中版本.public class quicksort private static void quicksort int a,int left,int right int cutoff partition a,left,right,...