1.直接插入排序
原理:將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。
要點:設立哨兵,作為臨時儲存和判斷陣列邊界之用。
實現:void insertsort(node l,int length) }
void shell(node l,int d)
l[j+d]=l[0]; }
} }
交換排序
1.氣泡排序
原理:將序列劃分為無序和有序區,不斷通過交換較大元素至無序區尾完成排序。
要點:設計交換判斷條件,提前結束以排好序的序列迴圈。
實現:void bubblesort(node l)
}if(!ischanged)//若沒有移動則說明序列已經有序,直接跳出
break; }
}2.快速排序
原理:不斷尋找乙個序列的中點,然後對中點左右的序列遞迴的進行排序,直至全部序列排序完成,使用了分治的思想。
要點:遞迴、分治
實現:
選擇排序
1.直接選擇排序
原理:將序列劃分為無序和有序區,尋找無序區中的最小值和無序區的首元素交換,有序區擴大乙個,迴圈最終完成全部排序。
要點:實現:
void selectsort(node l)
if(k!=i)//若發現最小元素,則移動到有序區
} }
2.堆排序
原理:利用大根堆或小根堆思想,首先建立堆,然後將堆首與堆尾交換,堆尾之後為有序區。
要點:建堆、交換、調整堆
實現:void heapsort(node l)
} void buildingheap(node l)
歸併排序
原理:將原序列劃分為有序的兩個序列,然後利用歸併演算法進行合併,合併之後即為有序序列。
要點:歸併、分治
實現:void mergesort(node l,int m,int n)
} 基數排序
原理:將數字按位數劃分出n
個關鍵字,每次針對乙個關鍵字進行排序,然後針對排序後的序列進行下乙個關鍵字的排序,迴圈至所有關鍵字都使用過則排序完成。
要點:對關鍵字的選取,元素分配收集。
實現:void radixsort(node l,length,maxradix)
collectelement(l,temp);
//收集
n=0;
m=m*10;
k++; }
}
八大排序演算法
一 概述 八大排序演算法包括 1 插入排序之直接插入排序 straight insertion sort 2 插入排序之希爾排序 shells sort 3 選擇排序之簡單選擇排序 selection sort 4 選擇排序之堆排序 heap sort 5 交換排序之氣泡排序 bubble sort...
八大排序演算法
排序的定義 輸入 n個數 a1,a2,a3,an 輸出 n個數的排列 a1 a2 a3 an 使得a1 a2 a3 an in place sort 不占用額外記憶體或占用常數的記憶體 插入排序 選擇排序 氣泡排序 堆排序 快速排序。out place sort 歸併排序 計數排序 基數排序 桶排序...
八大排序演算法
八大排序演算法 概述 排序有內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。我們這裡說說八大排序就是內部排序。當n較大,則應採用時間複雜度為o nlog2n 的排序方法 快速排序 堆排序或歸併排序序。快速排...