c语言几种排序方法的比较,基于C语言的几种排序方法比较.doc
基于C語言的幾種排序方法比較.doc
基于C語言的幾種排序方法比較 【摘要】文章對c語言中的冒泡排序法、選擇排序法、插入排序法進行比較討論,以試圖找出最佳排序方法。 【關鍵詞】c語言;排序方法;比較 引言 排序是計算機程序設計中的一種重要操作,其作用是將一個數(shù)據(jù)元素(或記錄)的任意序列重新排列成一個(按關鍵字)有序的序列[1]。按照排序記錄數(shù)量分為內部排序及外部排序兩類。若整個排序過程不需要訪問外存便能完成,則稱此類排序為內部排序。反之,若參與排序的記錄數(shù)量很大,使內存不能一次容納全部的記錄,所以排序過程中需要對外存進行訪問,則稱此類排序為外部排序。 換句話說,內部排序僅適合待排序記錄數(shù)量相對較少的序列。內部排序方法分類較多,按照排序過程依據(jù)的原則不同分類,大致分為五類:插入排序、交換排序、選擇排序、歸并排序和基數(shù)排序等。這里介紹的冒(起)泡排序大致屬于交換排序中的一種排序方法,下面將就c語言中冒泡排序法、選擇排序法、插入排序法進行比較討論,以試圖找出最佳排序方法. 1.冒泡排序法(起泡法) 1.1 冒泡排序算法分析 冒泡法算法分析:如果有n個待排序數(shù)據(jù),需要進行n-1趟比較。在第1趟比較中,要進行n-1次相鄰元素的兩兩比較,在第j趟比較中要進行n-j次兩兩比較。比較的順序從前往后,經(jīng)過一趟比較后,將最值沉底(換到最后一個元素位置),最大值沉底為升序,最小值沉底為降序。 1.2 實現(xiàn)冒泡排序算法c語言源程序清單 #include #include main( ) int *a , i ,j , t, n ; printf ( “請輸入需排序元素個數(shù) : n ” ); scanf(" %d",&n); a (int *)malloc(sizeof(int)*n); printf ( “請輸入每個數(shù)組元素 :” ); for (i 1;i< n;i i+1) scanf(“ %d”,&a[i]); for (i 1;i< n-1;i++) for (j 1;j< n-i;j++) if (a[j]>a[j+1]) t a[j];a[j] a[j+1];a[j+1] t; printf( “排序后的數(shù)組為 : “); for (i 1;i< n;i i+1) printf ( "%d ",a[i]); 1.3 冒泡排序算法特點 相鄰元素兩兩比較,每趟將最值沉底即可確定一個數(shù)在結果的位置,確定元素位置的順序是從后往前,其余元素可能作相對位置的調整。可以進行升序或降序排序。 該排序方法的優(yōu)點是比較原則簡單,排序序列相對穩(wěn)定;缺點是速度慢,每次只能比較移動相鄰兩個數(shù)據(jù),每一趟只能減少一個數(shù)據(jù),參與排序的記錄數(shù)量相對較少。 2.選擇排序法 2.1 選擇排序算法分析 選擇排序法的算法分析:每趟選出一個最值和無序序列的第一個數(shù)交換,n個數(shù)共選n-1趟。第i趟假設i為最值下標,然后將最值和i+1至最后一個數(shù)比較,找出最值的下標,若最值下標不為初設值,則將最值元素和下標為i的元素交換。 2.2 實現(xiàn)選擇排序算法c語言源程序清單 以降序為例: #include #include main( ) int *a , i ,j , t,k, n ; printf ( “請輸入需排序元素個數(shù) : n ” ); scanf(" %d",&n); a (int *)malloc(sizeof(int)*n); printf ( “請輸入每個數(shù)組元素 :” ); for (i 0;i
總結
以上是生活随笔為你收集整理的c语言几种排序方法的比较,基于C语言的几种排序方法比较.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++实现引用计数
- 下一篇: GPUImage – 亮度平均 GPUI