乙個時間效率為O n 的排序演算法

2021-09-12 10:00:25 字數 3495 閱讀 2048

題目:請實現乙個排序演算法,要求時間效率為o(n).(允許使用常量大小的輔助空間不得超過o(n))

首先回顧一下自己實現了的幾種常用的排序演算法

一、插入排序:

1 #include2

using

namespace

std;

3void insert_sort(int a, int

size)

414 a[i + 1] =key;15}

16}17void print_insert(int a,int

size)

1823 cout <

25int

main2()26;

28 insert_sort(a, 10

);29 print_insert(a, 10

);30 system("

pause");

31return0;

32 }

二、快速排序

1 #include2

using

namespace

std;

3void exchange(int &a, int &b)49

int partion(int a, int p, int

r)1020}

21 exchange(a[i + 1

], a[r]);

22return i + 1;23

}24void quick_sort(int a, int p, int

r)2531}

32void print_quick(int a, int

size)

3338 cout <

40int

main()41;

43 quick_sort(a, 0, 9

);44 print_quick(a, 10

);45 system("

pause");

46return0;

47 }

三、歸併排序

1 #include2

using

namespace

std;

3void merge(int a, int p, int q, intr)4

;8int r[100] = ;

9for (int i = 0; i < n1; i++)

1013

for (int i = 0; i < n2; i++)

1417 l[n1] =int_max;

18 r[n2] =int_max;

19int i = 0;20

int j = 0;21

for (int k = p; k <=r; k++)

26else30}

31}32void merge_sort(int a, int p, int

r)3341}

42void print_merge(int a, int

size)

4348 cout <

50int

main()51;

53 merge_sort(a, 0,9

);54 print_merge(a, 10

);55 system("

pause");

56return0;

57 }

四、堆排序

1 #include2 #include3

using

namespace

std;

4void exchange(int &a, int &b)510

void max_heapify(vector &a, int i, int

size)

1125}26

void build_maxheap(vector &a, int

size)

2732}33

void heap_sort(vector &a, int

size)

3441}42

void print(vector a, int

size)

4348 cout <

5051

intmain()

5262

print(a,size);

63build_maxheap(a,size);

64print(a,size);

65heap_sort(a, size);

66print(a, size);

67 system("

pause");

68return0;

69 }

五、計數排序

1 #include2

using

namespace

std;

3void counting_sort(int a, int last, int b, intk)4

;6for (int j = 1; j <= last; j++)710

for (int i = 1; i <= k; i++)

1114

for (int j = last; j >= 1; j--)

1519}20

void print_count(int a, int

last)

2126 cout <

28int

main()29;

31int b[9] = ;

32 counting_sort(a, 8, b, 5

);33 print_count(b, 8

);34 system("

pause");

35return0;

36 }

對於上述問題的理解:就是要對員工按照年齡來進行排序,顯然年齡是乙個較小的範圍可以讓我們用來做為常數級別的空間來存放,每個年齡段的人,然後根據年齡排序即可,故可以寫出如下的**:

1 #include2

using

namespace

std;

3void ages_sort(int age, int

length)4;

9for (int i = 1; i <= length; ++i)

1015

intindex=0;

16for (int i = 0; i <= largest_ages; ++i)

1723

}24 }

posted @

2016-04-19 20:40

general_up 閱讀(

...)

編輯收藏

實現乙個時間效率為O N 的排序演算法

如果這些數字的大小在乙個明確的範圍內,這個範圍不是特別大,就可以借助輔助空間實現時間效率為o n 讓我們從例子中來體會這中思想 例 對公司所有員工的年齡進行排序,公司總共有幾萬名員工,對年齡進行排序,可以使用輔助空間,要求時間複雜度為o n 分析 年齡肯定是有一定範圍的,1 100是基本的壽命,所以...

C 封裝乙個時間庫

h檔案是這樣的 pragma once include include int dayoftheweek int nyear,int nmonth,int nday 等待時間超時 int waittimeout unsigned int nmilliseconds class cmylocaltim...

開發乙個時間小程式

為什麼不自己動手量身打造乙個呢?行動起來。很簡單 需要展示時間的城市初定 加州 紐約,再加北京做對比 需要顯示具體的時分秒,和年月日 需要實時變化 在其他國家也能正確展示時間 這個小程式的核心是時間的處理。如何得到其他地區的時刻資訊?這還不簡單?先獲取本地時刻,然後加上或者減去另外乙個地點與國內 北...