1.按名次排序。思路先將陣列中的元素的序號求出並儲存在乙個陣列中,再建立乙個陣列將目標陣列的元素按序號儲存到該陣列中,再將該陣列複製到目標陣列中,最後刪除該陣列。
複雜度需要n*(n-1)/2次比較和2n次移動所以時間複雜度為o(n^2)
**如下:
//1.計數排序 複雜度需要n*(n-1)/2次比較和2n次移動
void
ranks
(int a,
int n,
int r)
//比較所有元素得到序號
for(
int i=
0;i1;i++
)else}}
}void
ranksort
(int a,
int n,
int r)
for(
int i=
0;i)delete
u;}
2.選擇排序法。思路將整體分為有序和無序兩部分,每次比出最大的放到有序的集合中,直至無序集長度為一。
複雜度需要n*(n-1)/2次比較和3*(n-1)次比較。所以時間的複雜度為:o(n2)
**如下:
//2.選擇排序法 複雜度需要n*(n-1)/2次比較和3*(n-1)次比較。
intindexofmax
(int a,
int n)
}return indexofmax;
}else
}void
selectionsort
(int a,
int n)
}
3.氣泡排序法。每個相鄰的比較將最大的「冒」到最後,每次「冒出」乙個元素,直至長度為一。
複雜度:需要n*(n-1)/2次比較和n*(n-1)/2次交換。所以時間複雜度為:o(n2)
**如下:
//3.氣泡排序法 複雜度:需要n*(n-1)/2次比較和n*(n-1)/2次交換
void
bubblesort
(int a,
int n)
}}
4.插入排序法。原理:將乙個元素插入到乙個有序集合的正確位置中,將第二個元素起依次新增到左邊有序的集合中。
兩種插入排序的比較次數相同,最好是n-1次,最壞是(n-1)*n/2次。所以時間複雜度為:o(n^2)
**如下:
//4.插入排序法 兩種插入排序的比較次數相同,最好是n-1次,最壞是(n-1)*n/2次。
void
insert
(int a,
int n,
const
int x )
void
insertsort
(int a,
int n)
}
所以綜上所述四種排序方法的時間複雜度均為:o(n^2) 資料結構與演算法之排序
三 演算法效能 二 七種排序演算法 資料結構之線性表 資料結構之鍊錶 資料結構之串 資料結構之圖 資料結構之排序演算法 對n個資料執行某種操作,使其按照某種規則有序的排列,這樣的操作就是排序。內排序與外排序 按照排序過程中資料是否全放在記憶體中,可以分為內排序和外排序 交插選並 其中內排序又分為插入...
《資料結構與演算法》之排序
資料結構與演算法 之鍊錶 資料結構與演算法 之鏈棧 資料結構與演算法 之佇列 資料結構與演算法 之二分查詢 資料結構與演算法 之二叉樹 如果你是一名程式設計師,或多或少你都了解過 聽說過排序。在專案中我們也會經常用到排序,排序非常重要,現在我在這裡分享一些經典的排序演算法。先附上demo位址 氣泡排...
資料結構與演算法之排序演算法 氣泡排序
2016年10月18日15 34 24 by piaxiaohui 氣泡排序 是一種交換排序,它的基本思想是 兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。氣泡排序的由來,就有些類似於水中的bubble,比較輕的bubble始終在水的底層,而較輕的bubble在水的上層 較輕的b...