簡單的快速排序

2021-08-04 14:41:54 字數 1601 閱讀 2852

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,...