依照《算法導(dǎo)論》偽代碼實(shí)現(xiàn)。


















































































































1
#ifndef RANDOMIZER_H
2
#define RANDOMIZER_H
3
4
#define MAXNUM 65536
5
6
#include<iostream>
7
#include<time.h>
8
using namespace std;
9
10
11
void random(unsigned int unsort[],long len)
12

{
13
srand((unsigned) time(NULL));
14
for(long i=0; i<len; i++)
15
unsort[i] =2*rand()%MAXNUM;//產(chǎn)生0 ~ 2的16次方之間的隨機(jī)數(shù),
16
//正好是unsigned int型的取值范圍
17
}
18
19
20
21
#endif//RANDOMIZER_H

2

3

4

5

6

7

8

9

10

11

12



13

14

15

16

17

18

19

20

21

1
#ifndef CTIMER_H
2
#define CTIMER_H
3
4
#include "Windows.h"
5
6
class CTimer
7

{
8
public:
9
CTimer()
10
{
11
QueryPerformanceFrequency(&m_Frequency);//取CPU頻率
12
}
13
void Start()
14
{
15
QueryPerformanceCounter(&m_StartCount);//開始計數(shù)
16
}
17
double End()
18
{
19
LARGE_INTEGER CurrentCount;
20
QueryPerformanceCounter(&CurrentCount);//終止計數(shù)
21
return
22
double(CurrentCount.LowPart-m_StartCount.LowPart)/(double)m_Frequency.LowPart*1000;
23
24
}
25
private:
26
LARGE_INTEGER m_Frequency;
27
LARGE_INTEGER m_StartCount;
28
};
29
30
#endif//CTIMER_H

2

3

4

5

6

7



8

9

10



11

12

13

14



15

16

17

18



19

20

21

22

23

24

25

26

27

28

29

30

1
#ifndef INSERTSORT_H
2
#define INSERTSORT_H
3
4
5
#include<iostream>
6
using namespace std;
7
8
9
/**//*
10
void insertsort(unsigned int A[],long,long len)
11
{
12
for(long j=1; j<len ;j++)
13
{
14
unsigned int key=A[j];
15
long i=j-1;
16
while (i>=0 && A[i]>key)
17
{
18
A[i+1]=A[i];
19
i--;
20
}
21
A[i+1]=key;
22
}
23
}
24
*/
25
26
27
/**//***這段代碼對一個整型數(shù)組進(jìn)行升序排序,可以看出每個元素插入到隊列中經(jīng)過兩個步驟:
28
一是挨個比較,找到自己所在的位置,而是把后面的數(shù)據(jù)全部移位,然后把元素插入。
29
要把數(shù)據(jù)插入,移位是必不可少了.因為要插入的隊列已經(jīng)是排序好的,我們可以使用二分法
30
來減少比較的次數(shù)。二分法的時間復(fù)雜度為O(log 2 n),而線性查找的復(fù)雜度為O(n)。
31
改進(jìn)后的代碼如下:***/
32
33
int compare(unsigned int a,unsigned int b)
34

{
35
return a<b?-1:a==b?0:1;
36
}
37
38
int binsearch(unsigned int A[], unsigned int key,long p, long r)//二分查找
39

{
40
long middle;
41
while (p <= r)
42
{
43
middle = (p + r) / 2;
44<img id=Codehighlighter1_730_833_Open_Image onclick="this.style.display='none'; Codehighlighter1_730_833_Open_Text.style.display='none'; C%2

2

3

4

5

6

7

8

9


10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27


28

29

30

31

32

33

34



35

36

37

38

39



40

41

42



43

44<img id=Codehighlighter1_730_833_Open_Image onclick="this.style.display='none'; Codehighlighter1_730_833_Open_Text.style.display='none'; C%2