八大排序算法思想介紹


1.插入排序

  *直接插入排序

  *希爾排序

2.選擇排序

  *簡單選擇排序

  *堆排序

3.交換排序

  *冒泡排序

  *快速排序

4.歸並排序

5.基數排序

不穩定排序:簡單選擇排序,快速排序,希爾排序,堆排序

穩定排序:冒泡排序,直接插入排序,歸並排序,奇數排序

image

一.插入排序

將第一個和第二個元素排好序,然后將第3個元素插入到已經排好序的元素中,依次類推

(插入排序最好的情況就是數組已經有序了)


二.希爾排序

因為插入排序每次只能操作一個元素,效率低

元素個數N,取奇數k=N/2,將下標差值為k的數分為一組(一組元素個數看總元素個數決定),在組內構成有序序列,再取k=k/2,將下標差值為k的數分為一組,構成有序序列,直到k=1,然后再進行直接插入排序


三.簡單選擇排序

選出最小的數和第一個數交換,再在剩余的數中又選擇最小的和第二個數交換,依次類推


四.堆排序

以升序排序為例,利用小根堆的性質(堆頂元素最小)不斷輸出最小元素,直到堆中沒有元素

1.構建小根堆

2.輸出堆頂元素

3.將堆低元素放一個到堆頂,再重新構造成小根堆,再輸出堆頂元素,以此類推


五.冒泡排序

改進1:如果某次冒泡不存在數據交換,則說明已經排序好了,可以直接退出排序

改進2:頭尾進行冒泡,每次把最大的沉底,最小的浮上去,兩邊往中間靠1


六.快速排序

選擇一個基准元素,比基准元素小的放基准元素的前面,比基准元素大的放基准元素的后面,這種動作叫分區,每次分區都把一個數列分成了兩部分,每次分區都使得一個數字有序,然后將基准元素前面部分和后面部分繼續分區,一直分區直到分區的區間中只有一個元素的時候,一個元素的序列肯定是有序的嘛,所以最后一個升序的序列就完成啦


七.歸並排序

將一個無序的數列一直一分為二,直到分到序列中只有一個數的時候,這個序列肯定是有序的,因為只有一個數,然后將兩個只含有一個數字的序列合並為含有兩個數字的有序序列,這樣一直進行下去,最后就變成了一個大的有序數列


八.基數排序

找到最大的數,開個比最大的數大一點的數組,遍歷每個元素,某個元素為k,則a[k]++,最好遍歷數組a,a[k]等於多少就輸出多少個k

只能處理整型數



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM