摘要:快速排序思路在數(shù)組中尋一中間數(shù),將比中間數(shù)小的放在左邊,將比中間數(shù)大的放在右邊從左邊開始找,找到比中間數(shù)大的,記住,從右邊開始找,找到比中間數(shù)小的,然后交換兩邊然后在左邊再尋一中間數(shù),同坐上面的事,右邊也一樣,然后循環(huán)實現(xiàn)數(shù)組輸出中間值的位
快速排序 思路
在數(shù)組中尋一中間數(shù),將比中間數(shù)小的放在左邊,將比中間數(shù)大的放在右邊
從左邊開始找,找到比中間數(shù)大的,記住,從右邊開始找,找到比中間數(shù)小的,然后交換兩邊
然后在左邊再尋一中間數(shù),同坐上面的事,右邊也一樣,然后循環(huán)
數(shù)組:[2,6,3,6,5,9,1]
輸出:[1 2 3 5 6 6 9 ]
private static void paixu(int[] arrs, int h, int e) { int head =h; int end = e; int x=(h+e)/2;//中間值的位置 while (h <= e){//兩個指針還沒有遇到 while (arrs[x]>arrs[h]){//從左邊開始找,找到比中間值大的數(shù) h++; } while (arrs[x]< arrs[e]){//從右邊開始查找,找到比中間值小的 e--; } //交換值 int m; m = arrs[h]; arrs[h] = arrs[e]; arrs[e] = m; //2,6,3,6,5,9,1 h++; //2,1,3,6,5,9,6 e--; //2,1,3,5,6,9,6 } //遞歸查詢左右兩邊 if (head < e){ paixu(arrs,head,e);} if (end > h){ paixu(arrs,h,end);} }
為什么會有h++,e--呢
跟一下代碼
輸入數(shù)組[2,6,3,6,5,9,1]
第一次運行
中間位置是3,值是6
左邊是0,右邊是6
往下執(zhí)行
h=1,e=6
數(shù)組變成[2,1,3,6,5,9,6]
執(zhí)行加減操作 h=2,e=5;然后開啟第二輪的執(zhí)行
假如不進行加減操作,
繼續(xù)執(zhí)行的話,左邊繼續(xù)判斷,當查詢到6的時候停止,
右邊查詢,查詢到6的時候停止,然后交換,6和6交換,然后再次開啟循環(huán),就會死循環(huán),
當執(zhí)行加減操作之后,再次判斷的時候,就會從交換數(shù)據(jù)之后的索引開始判斷,就不會再次判斷了,
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69502.html
摘要:快排是一種不穩(wěn)定的排序算法,在經(jīng)過排序后,等值的元素的相對位置可能發(fā)生改變。 聲明:碼字不易,轉(zhuǎn)載請注明出處,歡迎文章下方討論交流。 前言:Java數(shù)據(jù)結構與算法專題會不定時更新,歡迎各位讀者監(jiān)督。本篇文章介紹排序算法中最常用也是面試中最容易考到的排序算法——快排,包括快排的思想和原理、java快排代碼、快排的特點性能和快排的適用場景。 0、其他排序算法索引(待更) java數(shù)據(jù)結構與...
摘要:代碼片段語言組織能力有限,直接上代碼排序算法之快速排序參數(shù)為需要排序的數(shù)組參數(shù)為數(shù)組的起始下角標即參數(shù)為數(shù)組的最后下角標即經(jīng)過一輪排序,已經(jīng)將數(shù)組分為左右兩部分進行遞歸排序總結快速排序的精髓在于分治思想,分而治之,它的時間復雜度為。 算法簡述 所謂快速排序算法是基于交換排序和遞歸思想的,它的速度的確如名字所示——快!并且這種一算一般被用作數(shù)量級比較大的數(shù)據(jù)當中,在大數(shù)據(jù)中有著很重要的地...
摘要:穩(wěn)定與不穩(wěn)定算法示例以下圖片解釋了穩(wěn)定和不穩(wěn)定的排序是如何工作的這就是穩(wěn)定和不穩(wěn)定排序算法之間的區(qū)別。穩(wěn)定排序算法的一些常見示例是合并排序,插入排序和冒泡排序。 showImg(https://segmentfault.com/img/remote/1460000018913243); 來源 | 愿碼(ChainDesk.CN)內(nèi)容編輯 愿碼Slogan | 連接每個程序員的故事 網(wǎng)...
摘要:接下來我來說明快速排序的思路以及實現(xiàn)的代碼??焖倥判蛩悸肥紫仁嵌x一個變量,把數(shù)組的第一個元素的值賦給,然后定義兩個變量指向數(shù)組的第一個元素和最后一個元素。 今天突然想寫個排序,以前寫過,然后寫了之后一直出錯,然后自己百度了一下,看了別人寫的方法,自己也嘗試著寫了一個。接下來我來說明快速排序的思路以及實現(xiàn)的代碼。 快速排序思路:首先是定義一個變量key,把數(shù)組的第一個元素的值賦給key...
摘要:前面介紹了七大算法的思想與實現(xiàn)步驟,下面來做一個歸總。直到無序區(qū)中的數(shù)為零,結束排序。步驟以從小到大為例,排序數(shù)組大小為。比較完以后則排序結束。堆排序思想堆排序是采用樹的形式的數(shù)據(jù)結構來進行排序的,其中每一個堆都是完全二叉樹。 前面介紹了七大算法的思想與實現(xiàn)步驟,下面來做一個歸總。 排序方法 平均復雜度 最壞復雜度 最好復雜度 輔助空間 穩(wěn)定性 直接選擇排序 O(n^2...
閱讀 997·2021-09-26 10:15
閱讀 2088·2021-09-24 10:37
閱讀 2591·2019-08-30 13:46
閱讀 2640·2019-08-30 11:16
閱讀 2432·2019-08-29 10:56
閱讀 2603·2019-08-26 12:24
閱讀 3488·2019-08-23 18:26
閱讀 2671·2019-08-23 15:43