1 #include 23using
namespace
std;
45 typedef int
elementtype;67
8/*插入排序
*//*
時間複雜度o(n²)*/9
void insertionsort ( elementtype *a, int
n )1021}
2223
2425
/*希爾排序
*////
特殊的插入排序
26void shallsort ( elementtype *a, int
n )2740}
41}4243
44/*
堆排序*/
45#define leftchild( i ) ( 2 * ( i ) + 1 )
4647
void percdown ( elementtype *a, int i, int
n )48
61 a[i] =tmp;62}
63void heapsort( elementtype *a, int
n )64
7374}75
7677
/*快速排序
*/78
79void qusort( int *a, int lt, int
rt )
8092
93 a[i] =key;
94 qusort( a, lt, i-1
);95 qusort( a, i+1
, rt );96}
9798
void qsort(void *base
, size_t nmemb, size_t size,
99int (*compar)(const
void*, const
void*))
100//
目標陣列, 項數, sizeof(int), 函式指標
101int mycomp ( const
void *p1, const
void *p2 )
102113
114115
116117
/*歸併排序
*/118
/*lpos = start of left half, rpos = start of right half
*/119
void merge ( elementtype *a, elementtype *tmparray,
120int lpos, int rpos, int
rightend )
121136
while( lpos <=leftend )
137 tmparray[tmppos++] = a[lpos++];
138while( rpos <=rightend )
139 tmparray[tmppos++] = a[rpos++];
140141
/*copy tmparray back
*/142
for( i=0; i)
143 a[rightend] =tmparray[rightend];
144}
145void msort ( elementtype *a, elementtype *tmparray,
146int left, int
rigth )
147157
}158
void mergesort ( elementtype *a, int
n )159
168else
169//
fatalerror( "no space for tmp array!!!" );
170return
;171
}172
173174
/*選擇排序
*/175//略
176/*
桶排序*/
177//
略178
/*氣泡排序
*/179//略
180181
182int
main()
183187
所有排序總結(內排序)
花時間把所有的排序重新 寫了一遍。應該是認真寫過一遍,學的時候根本就沒寫過 寫得時候才發現,理解不深刻。基本上 只是懂怎麼做,不懂為什麼。把我寫得記在這裡,以後用得著了回來看看。暫時就到這裡吧,以後有時間,繼續研究這些東西。在寫出來。三個o n2 的演算法 選擇排序 1 void selection...
內排序演算法總結 快速排序
快速排序 快速排序是一種在含n個數的輸入陣列上最壞情況執行時間為o n2 的演算法,平均效能的期望執行時間為o nlgn 且o nlgn 記號中隱含的常數因子很小。另外,它還能夠進行原地置換排序。快速排序是基於分治模式上的,分治過程三個步驟 1.分解 把陣列a p.r 分成兩個非空子陣列a p.q ...
資料結構 排序 內排序總結
1.時間複雜度總結 n2 直接插入排序,氣泡排序,簡單選擇排序 這三種裡面直接插入排序好一點 nlogn 快速排序,堆排序,歸併排序 n 基數排序 其他 n2 2.時間效能與初始序列無關 口訣 一堆烏龜選 堆排序,歸併排序,基本選擇排序,基數排序 3.空間效能 快速排序 logn 歸併排序 n 基數...