2017-09-05學習記錄1

今天復習了五個排序,分別是冒泡排序,選擇排序,插入排序,哈希排序和快速排序;

然后看了thinking in java的第一章和第二章;

下面就是今天學的所有知識


1.冒泡排序:冒泡排序主要是對鄰近的數據進行比較,根據結果判斷是否進行交換,一輪一輪挑出其中比較大(小)的數據放到數組末尾;在一輪一輪比較中,需要比較的數據一次減少一個,直到最后下標為0和1的進行比較后,則代表數組已經有序了。

下面是實現代碼:

冒泡排序

在這里面,upper用來決定每一輪進行排序的數據個數,由于下標可以為0且內部有sc[i+1]代碼的存在,所以里層for循環的取值為:0~sc.length-2;

2.選擇排序:這個選擇排序和冒泡排序進行比較的次數相等,不過這里是一次性找出一輪數據中最大(小)的數據,放在數組末尾(開頭),然后下一輪取其他的數據再一次進行選取最大(小)值;

下面是實現代碼:

選擇排序

這里實現的是一個從小到大的排序。首先upper和上面一樣取值:1~sc.length-1,在表循環中,將sc[0]設置為最大值,然后數據判斷從下標1開始,若有sc[n]<sc[0]則把最大值的下標由0換成n,最后判斷一下最后的數據是否是下標代表的最大值,不是則把下標代表的最大值和最后面的值做一個交換,這樣就完成了一次排序;

這里的子循環中的i可以為1,這代表sc[0]和sc[1]進行比較;


3.插入排序:插入排序是把一個數組分成了三個部分:有序部分,待插入值,無序部分;有序部分的個數由1~sc.length-1;當最后一個數據也進入了有序隊列,則排序完成;插入排比價序主要是將待插入值放入有序隊列中去,通過比較,將它插入到隊列中形成一個有序的新隊列;

下面是插入排序的代碼:

插入排序

其中count代表待插入值的下標,1~sc.length-1;然后子循環中用num來存儲待插入值,讓每一個值和他比較,若待插入值小于比較的值,則把比較的值直接后移一位;i=1時代表前面所有數據都大于待插入值,所以就把該值放在0下標處;


4.哈希排序:哈希排序是一個改良版的插入排序,它主要是通過選取一定的間隔,在早期就把離正確位置很遠的數據直接一次性轉移過去,而不需要插入排序一樣一次一次比較復制慢慢地轉移過去。在大量數據中,他的速度要比插入排序好很多,而且它在數據逆行的情況下,速度比插入排序快了很多;下面是哈希排序的代碼,這個我自己也不是很明白;

希爾排序

這里的num就是選取的固定間隔,num遵循一種算式,讓每一個num互成質數,這樣的效率是最高的;第一次排序,對下標為:num~sc.length-1的數據進行了間隔為num的數組的排序,注意這里子循環判斷條件已經發生改變了;然后按公式慢慢減小num,最后直到為1時,代表數據已經排序完成;

哈希排序和插入排序最大的不同之處在于 ?sc[i] = sc[i-1] ?和 ?sc[i] = sc[i-num];


5.快速排序:快速排序主要是應用了一個遞歸和劃分的概念。劃分指的是取一個值,將數組中的數據分成兩部分,左邊的全部小于該數據,右邊的全部大于等于該數據;然后又把左邊和右邊兩個數組用這個方法,分到最后,所有數據已經做到了有序狀態了;這個排序要分成兩個部分,一個是遞歸的部分,另一個是劃分的部分;

劃分部分
遞歸部分


這個函數采用的是直接把數組最右邊的數據作為他的中間值(樞紐),然后在劃分后,把樞紐放在兩個部分中間,此時該數據已經存在了正確排序的位置了,然后對兩邊兩組新數組進行排序……

在劃分階段,我們設置了一個左指針和右指針,分別判斷兩頭的數據和樞紐的關系,若左側存在大于樞紐的值并且右側存在小于樞紐的值,則將兩個值進行交換,然后繼續判斷,直到兩個指針相等或擦肩而過,則代表該已經劃分成功,這時候把最右端數據和右數組的第一個數據進行交換,則完成了劃分的功能了。返回的是中間樞紐的下標值;


上面是今天所有的排序知識,后面還有另外兩章;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 最近嘗試使用pathForResource:ofType的方式去取Bundle里的資源發現沒有取到,打印出來的路徑...
    丶Destinyxl閱讀 688評論 0 0
  • 關于人對事物的認知主要有三個方面 將若干簡單認識組合為一個復合知識,由此產生出各種復雜的認識。 將兩個認識放在一起...
    kisslight閱讀 231評論 0 0
  • 前段時間辭職了,多了很多時間胡思亂想。思考的范圍包括但不僅限于,宇宙洪荒混沌之光,前途渺茫有點心慌……當然子曾經曰...
    Sheepy閱讀 1,024評論 5 2
  • 你小跑著追上車 回頭看我一眼 頭發被纏在嘴邊 我還是看到了遮不住的那抹笑 于是我也放下緊蹙的眉 予你一笑 馬路上我...
    酒溪閱讀 259評論 0 5