摘要:總的來說,快速排序也是利用了分治法的思想??焖倥判虻臅r(shí)間復(fù)雜度為,這是一種不穩(wěn)定的排序方法。以下代碼實(shí)現(xiàn)以二分法的思路對(duì)數(shù)組分組以最左邊最右邊中間三個(gè)數(shù)的中位數(shù)為主元確定主元
以上為思路。
總的來說,快速排序也是利用了分治法的思想。
基本步驟:1.先選擇好合適的主元pivot,
2.然后再把比主元小的元素放到主元的左邊(右邊),把較大的元素放到主元的右邊(左邊),
3.接著再以主元為分界點(diǎn),把數(shù)組分為兩個(gè)部分,再分別對(duì)兩邊的數(shù)組重復(fù)第二步的操作,
4.最后便實(shí)現(xiàn)了有序排列。
快速排序的時(shí)間復(fù)雜度為O(NlgN),這是一種不穩(wěn)定的排序方法。
以下代碼實(shí)現(xiàn)
public static void quickSort(int arr[], int left, int right) { int index = partition(arr, left, right); if (left < index - 1) quickSort(arr, left, index - 1); if (index < right) quickSort(arr, index, right); } //以二分法的思路對(duì)數(shù)組分組 private static int partition(int arr[], int left, int right){ int i = left, j = right; int tmp; //以最左邊、最右邊、中間三個(gè)數(shù)的中位數(shù)為主元 int pivot = findPivot(arr, left, (left+right)>>1, right); while (i <= j) { while (arr[i] < pivot) i++; while (arr[j] > pivot) j--; if (i <= j) { tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; i++; j--; } } return i; } //確定主元 private static int findPivot(int[] nums, int left, int mid, int right){ if(nums[left] > nums[right]) { int temp = nums[left]; nums[left] = nums[right]; nums[right] = temp; } if(nums[left] > nums[mid]) { int temp = nums[left]; nums[left] = nums[mid]; nums[mid] = temp; } if(nums[mid] > nums[right]) { int temp = nums[right]; nums[right] = nums[mid]; nums[mid] = temp; } return nums[mid]; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/71240.html
摘要:接下來我來說明快速排序的思路以及實(shí)現(xiàn)的代碼??焖倥判蛩悸肥紫仁嵌x一個(gè)變量,把數(shù)組的第一個(gè)元素的值賦給,然后定義兩個(gè)變量指向數(shù)組的第一個(gè)元素和最后一個(gè)元素。 今天突然想寫個(gè)排序,以前寫過,然后寫了之后一直出錯(cuò),然后自己百度了一下,看了別人寫的方法,自己也嘗試著寫了一個(gè)。接下來我來說明快速排序的思路以及實(shí)現(xiàn)的代碼。 快速排序思路:首先是定義一個(gè)變量key,把數(shù)組的第一個(gè)元素的值賦給key...
摘要:快速排序思路在數(shù)組中尋一中間數(shù),將比中間數(shù)小的放在左邊,將比中間數(shù)大的放在右邊從左邊開始找,找到比中間數(shù)大的,記住,從右邊開始找,找到比中間數(shù)小的,然后交換兩邊然后在左邊再尋一中間數(shù),同坐上面的事,右邊也一樣,然后循環(huán)實(shí)現(xiàn)數(shù)組輸出中間值的位 快速排序 思路 在數(shù)組中尋一中間數(shù),將比中間數(shù)小的放在左邊,將比中間數(shù)大的放在右邊從左邊開始找,找到比中間數(shù)大的,記住,從右邊開始找,找到比中間數(shù)...
摘要:排序算法和集合工具類排序算法和集合工具類。面試官總是問排序算法也不是在難為你,而是在考察你的編程功底。你首先要理解多線程不僅僅是和那么簡(jiǎn)單,整個(gè)并發(fā)包下面的工具都是在為多線程服務(wù)。 去年的這個(gè)時(shí)候樓主通過兩個(gè)月的復(fù)習(xí)拿到了阿里巴巴的 offer,有一些運(yùn)氣,也有一些心得,借著跳槽季來臨特此分享出來。簡(jiǎn)單梳理一下我的復(fù)習(xí)思路,同時(shí)也希望和大家一起交流討論,一起學(xué)習(xí),如果不對(duì)之處歡迎指正一...
摘要:前面介紹了七大算法的思想與實(shí)現(xiàn)步驟,下面來做一個(gè)歸總。直到無序區(qū)中的數(shù)為零,結(jié)束排序。步驟以從小到大為例,排序數(shù)組大小為。比較完以后則排序結(jié)束。堆排序思想堆排序是采用樹的形式的數(shù)據(jù)結(jié)構(gòu)來進(jìn)行排序的,其中每一個(gè)堆都是完全二叉樹。 前面介紹了七大算法的思想與實(shí)現(xiàn)步驟,下面來做一個(gè)歸總。 排序方法 平均復(fù)雜度 最壞復(fù)雜度 最好復(fù)雜度 輔助空間 穩(wěn)定性 直接選擇排序 O(n^2...
閱讀 2255·2023-04-26 00:00
閱讀 3456·2021-09-24 10:37
閱讀 3625·2021-09-07 09:58
閱讀 1587·2019-08-30 15:56
閱讀 2275·2019-08-30 13:11
閱讀 2368·2019-08-29 16:38
閱讀 1058·2019-08-29 12:58
閱讀 1984·2019-08-27 10:54