1. 程式人生 > >第一次寫快速排序演算法出現棧溢位和排序錯誤的問題

第一次寫快速排序演算法出現棧溢位和排序錯誤的問題

從昨天開始看快速排序演算法, 自己看了一會明白了快速排序演算法的原理,想把它寫出來。可是說起來簡單做起來難,本應該是很簡潔的程式碼我卻怎麼也寫不對,尤其是快速排序演算法有遞迴呼叫,很鍛鍊思維能力。

剛剛按照網上的一段程式進行編寫,一邊看示例程式碼一邊寫自己的程式碼,卻出現了很多錯誤。

先把正確的程式碼貼上來:

//快速排序演算法
class QuickSort{
	//主方法
	public void quicksort(int arr[],int left,int right) {
		int  pivot;
		if(left<right){
			//以pivot為樞軸,較之小的元素在左,較之大的元素在右
			pivot=partition(arr, left, right);
			//對左邊的元素呼叫快速排序
			quicksort(arr,left,pivot-1);
			//對右邊陣列呼叫快速排序
			quicksort(arr,pivot+1,right);
		}
		
	}
	
	//快速排序演算法的切割連結串列
	public int partition(int arr[],int left,int right){
		int pivotkey = arr[left];
		//樞軸選中後永遠不變,最終在中間,前邊小後變大
		while(left<right) {
			while(left<right&&arr[right]>=pivotkey)
			{
				--right;
			}
			arr[left]=arr[right];
			//此時arr[left]為空,不過它的值儲存著pivot中
			while(left<right&&arr[left]<=pivotkey)
			{
				++left;
			}
			arr[right]=arr[left];
			
			
		}
	arr[left]=pivotkey;
	return left;
	}
}

出現的第一個錯誤是拉下了第21行的外層迴圈,導致指標在進行移動的時候沒有在正確的位置停下來。

第二個錯誤是第32行的     arr[right]=arr[left];   

我寫成了arr[lefr]=pivotkey;而丟掉了第三十六行的語句。

而這個錯誤導致了棧溢位,“Exception in thread "main" java.lang.StackOverflowError”,

第三個錯誤是第22行的while(left<right&&arr[right]>=pivotkey) 中的判斷條件我落下了“=”寫成了while(left<right&&arr[right]>pivotkey) 

這樣就會導致一個問題,當陣列中出現兩個相等的數時,因為判斷條件中沒有相等這一條,所以就不會執行while裡面的語句,造成程式一直不能跳過這兩個相等的數,也就是說當陣列中有兩個相等的元素時,程式就會執行到這裡卡主。

相關推薦

第一快速排序演算法出現溢位排序錯誤的問題

從昨天開始看快速排序演算法, 自己看了一會明白了快速排序演算法的原理,想把它寫出來。可是說起來簡單做起來難,本應該是很簡潔的程式碼我卻怎麼也寫不對,尤其是快速排序演算法有遞迴呼叫,很鍛鍊思維能力。 剛剛按照網上的一段程式進行編寫,一邊看示例程式碼一邊寫自己的程式碼,卻出現了

javascript 表格增刪改查 排序不會(第一部落格,求交流哈)

  學習JS快1個月了,博主本人上的是培訓的,快考試了,補習下學過的 發下今晚寫的吧。。。 有大神看看我的這種程度,排序事件怎麼弄~~ <!DOCTYPE html><html lang="zh"><head>    <

第一部落格,分享下一個巧妙演算法

問題描述: 如何將一個字串,如“123ABC”(其字串每個字元是十六進位制的一個數),將其轉化為二進位制,並按位取反,再轉化為十六進位制,輸出。 問題很簡單,按照簡單邏輯我們可以照著題目思路走下去,程式設計能力不錯的同學可以直接實現。 但如果考慮到xxxx 的按位取反就是(

第一氣泡排序

static void  Main( string[ ] args)  { int [] array = new  int []{1,8,3,9,4,7} for(int i; i = 0; i<array.length-1;i++ ) { for(int j; j=

第一隨筆

xxx byte valueof exce format except parse 基本類 bool 基本數據類型byte、short,int,long,float,double,boolean,char 相應的封裝類型:Byte,Short,Integer,Long,Fl

第一,python爬蟲圖片,操作excel。

comment org ems exc strip() all 全局變量 習慣 生成   第一次寫博客,其實老早就註冊博客園了,有寫博客的想法,就是沒有行動,總是學了忘,忘了丟,最後啥都沒有,電腦裏零零散散,東找找,西看看,今天認識到寫博客的重要性。   最近閑著看了潭州教

第一作業。 一定的不好,但我會努力改進。

() pass elif user pri == 作業 name 輸入 f = open("username.txt","r")y = f.read()#print(y)f.close()p = open("password.txt","r")p1 = p.read()#p

婧城石化 我得第一需求文檔 希望大家點評

誤差 -- 員工 業務流程 主管 短信提醒 個人 失敗 允許 婧城石化 1、 背景: 企業背景 山東省淄博市周村區催化劑的婧城石化老板想做一個打卡系統,該公司年產值在1000萬左右主要從事化工塑料方面在全國範圍內銷售,該公司員工有50-60員。 實現功能 公司想做一個打

第一代碼總結

過程 語法 nbsp 視頻 視頻教程 交互 時間 查詢 調用 第一次寫,按視頻教程代碼研究後,將代碼逐行進行註釋,刪掉代碼,自己來寫,還是犯了很多錯誤,整個過程三小時 1.最多的是語法錯誤,忘記寫分號最多 2.參照註釋寫,基本能寫出來,但是代碼縮進有錯誤 調整時間很長 3

mininet、floodlight在第一SND上機作業中出現的一些問題

ast att vim文本 get 教程 經驗 mini sdn quest mininet、floodlight在第一次SND上機作業中出現的一些問題 首先給出鏈接 VMware安裝 mininet安裝 floodlight安裝及問題,各個版本Ubuntu SDN第一次

第一隨筆,記錄一下初衷

經歷 什麽 解決方法 問題 關於 喜歡 不能 一段 而且 經歷了一個思想鬥爭後,我想明白了,為什麽要寫博客。 之前學習時遇到了問題,百度後,在一篇博客幫助下快速的解決了。 於是我想,我不是不也可以通過記錄自己的經歷,來幫助他人?而且費曼學習法中,也提到了,教會他人是掌握技能

Java第一作業:規範化輸出、二維陣列排序問題

2. (15分)某省居民電價分三個“階梯”:月用電量50度以內的,電價為0.538元/度;用電量在51度至200度之間的,電價為0.568元/度,用電量超過200度的,電價為0.638元/度。編寫程式,使用者從鍵盤輸入用電量,程式輸出使用者應繳納的電費。 (輸入輸出介面,迴圈)(格式化輸出)

尋找大富翁(25 分)絕對幫你AC型(第一部落格)真·原創!

尋找大富翁(25 分) 胡潤研究院的調查顯示,截至2017年底,中國個人資產超過1億元的高淨值人群達15萬人。假設給出N個人的個人資產值,請快速找出資產排前M位的大富翁。 輸入格式: 輸入首先給出兩個正整數N(≤10^​6​​ )和M(≤10),其中N為總人數,M為需要找出的大富翁

2018.10.5 Trie封裝(第一Trie樹)

** 2018.10.5 ** 今天比賽打炸,想了一個不太正確的做法,然後hash不會寫,試著去寫Trie數,還作死地試著寫成資料結構,結構寫了一個上午 程式碼如下:(這是沒有封裝的) #include <iostream> #include <

第一ssm專案經驗總結

對於一個學後端的來說,特別是javaweb來說,ssm框架是必備的。 學完之後佈置了作業,關於ssm框架的小練習,也是第一次練習這種關於ssm框架的,現談談我對此的感受及經驗: 剛開始的確實為難的因為裡面的要求比較多,也是第一次做這種在自己感覺比較很有難度的練習

【手動滑稽】第一部落格讓我浪一浪first~blog~哈哈

【演算法設計與分析基礎 習題1.1】1·研究一下 al-Khorezmi(或者稱為 al-Khwarizmi,譯名為阿爾·花刺子模),“演算法”(algorithm)一次起源於這個人的名字。研究過程中我們還會發現,“演算法”一詞的起源和“代數”(algebra)一詞的起源是相同的。  

MySQL8.0安裝+第一登陸+修改密碼 時出現的問題

安裝 因為之前裝過但是裝在C盤,這次是想把它移到D盤,所以把之前安裝的部分都刪掉了,就留下了MySQL Installer檔案用來安裝。有一個很坑的地方,就是它安裝目錄預設在C盤,如果你想更改目錄,那麼 Choosing a Setup Type 那一步要注意選 Custo

第一部落格的小白,衝鴨!

第一次寫部落格加上第一次寫markdown 本人第一次寫部落格,可能發錯地方,語言不當,望海涵輕噴。 怎麼看都看不懂啊,只用過錘子便籤,後來聽說這個錘子要掛了,就不用了 我隨便打一點東西吧,試試顯示效果,權當練字吧,實際上是我不會用。。。。 我模仿的是

第一部落格

            這是我自己的第一份部落格,現在對於部落格還不是很瞭解,所以慢慢探索吧。之所以寫一下這篇,是為了讓自己在以後能看到在學校成長的過程。寫部落格也是一位同學建議來的,看到他寫的部落格有條不紊,成長很快,所以我也開始我的部落格生涯。            

排序演算法【動畫】詮釋排序過程【一】【氣泡排序,選擇排序,插入排序,歸併排序快速排序

目錄 語言:c# 1. 氣泡排序(bubble sort) 每一次排序過程: 介紹:氣泡排序是一種最簡單的排序演算法。氣泡排序得名與鍵值較小的元素如同“氣泡”一樣逐漸到序列的頂端。 優點:最簡單的排序演算法, 缺點: 慢,每次只能