題目:請實現乙個排序演算法,要求時間效率為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 #include2posted @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 }
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...
開發乙個時間小程式
為什麼不自己動手量身打造乙個呢?行動起來。很簡單 需要展示時間的城市初定 加州 紐約,再加北京做對比 需要顯示具體的時分秒,和年月日 需要實時變化 在其他國家也能正確展示時間 這個小程式的核心是時間的處理。如何得到其他地區的時刻資訊?這還不簡單?先獲取本地時刻,然後加上或者減去另外乙個地點與國內 北...