1.插入排序
*直接插入排序
*希爾排序
2.選擇排序
*簡單選擇排序
*堆排序
3.交換排序
*冒泡排序
*快速排序
4.歸並排序
5.基數排序
將第一個和第二個元素排好序,然后將第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
只能處理整型數

