資料結構基礎** (嚴蔚敏 人郵教育出版社)
簡單選擇排序
#include
intselectionsort
(int a,
int n)
} t=a[i]
; a[i]
=a[minj]
; a[minj]
=t; sw++;}
if(i!= minj)
return sw;
}int
main()
sw=selectionsort
(a,n)
;for
(i=0
;i1;i++
)printf
("%d"
,a[i]);
}printf
("\n");
printf
("%d\n"
,sw)
;}
輸出結果如下:
堆排序
#include
#include
using namespace std;
//堆排序
void
heapadjust
(int a,
int s,
int m)
//函式用來調整堆,使元素稱為大根堆(將a[s...m]調整為以a[s]為根的大根堆。)
if(v>=a[j]
)//如果v大於較大的孩子結點的值,跳出迴圈。說明v的插入位置就是當前s的位置。
a[s]
=a[j]
;//如果v並沒有大於當前孩子結點的值,把v與當前孩子結點位置交換。並且繼續比較
s=j;
//與當前位置s值的兩個孩子的值的大小,知道找到合適的插入位置再跳出迴圈。
} a[s]
=v;//v放置在位置s上
}//建立初始堆
void
creatheap
(int a,
int n)
}//堆排序的實現
void
heapsort
(int a,
int n)
}int
main()
heapsort
(a,n)
;for
(i=1
;i)//輸出時從包含資料元素位置輸出。
printf
("%d"
,a[i]);
}return0;
}
因為第乙個位置a[0]我們不存值,所以輸出的時候為了好看,第乙個輸入了空格。 第八章 排序技術
排序共分為5大類,插入 交換 選擇 歸併 分配。他們的穩定性及平均時間效能如下圖 這是幾種排序演算法的簡單思想 1.直接插入排序 每一趟將乙個待排序的記錄,按其關鍵字的大小插入到已經排好序的一組記錄的適當位置上,直到所有待排序記錄全部插入為止。2.希爾排序 先取乙個小於n的整數d1作為第乙個增量,把...
第八章 排序技術
一 歸併排序 將原序列分成若干個子串行,然後重組 include.h using namespace std const int n 9 int a n int temp n void msortroot int f,int e,int mid while i 排序後有遺漏需再次填入 while j...
第八章 線性時間排序
這章剛開始證明了基於比較的排序的演算法在最壞情況下,都需要做nlgn次比較。由此可以推出合併排序快速排序都是漸進最優的比較排序演算法。線性時間排序 1.計數排序 計數排序假設n個輸入元素中的每乙個都是介於0 k之間的整數,此處k為某個整數。當k o n 時,計數排序的執行時間為o n 計數排序的思想...