Skip to content

Commit 5926b4d

Browse files
committed
init repo, add algorithm[ insert_sort, merge_sort, quick_sort]
1 parent 5210770 commit 5926b4d

File tree

141 files changed

+44704
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

141 files changed

+44704
-0
lines changed

.gitignore

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
#################
3+
## Qt
4+
#################
5+
*.moc
6+
ui_*.h
7+
8+
9+

Doxyfile

+2,454
Large diffs are not rendered by default.

Introduction_to_Algorithms.pro

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
TEMPLATE = app
2+
CONFIG += console
3+
CONFIG -= app_bundle
4+
CONFIG -= qt
5+
CONFIG += c++11
6+
7+
SOURCES += main.cpp \
8+
src/google_test/gtest-all.cc
9+
10+
include(deployment.pri)
11+
qtcAddDeployment()
12+
13+
HEADERS += \
14+
src/google_test/gtest.h \
15+
src/sort_algorithms/insert_sort/insertsort.h \
16+
src/sort_algorithms/insert_sort/insertsort_test.h \
17+
src/sort_algorithms/merge_sort/mergesort.h \
18+
src/sort_algorithms/merge_sort/mergesort_test.h \
19+
src/sort_algorithms/quick_sort/quicksort.h \
20+
src/sort_algorithms/quick_sort/quicksort_test.h \
21+
src/tools.h
22+

README.md

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# 《算法导论》中算法的C++实现
2+
<!--
3+
作者:华校专
4+
5+
** 本文档可用于个人学习目的,不得用于商业目的 **
6+
-->
7+
本项目中的所有算法均来自于《算法导论》第三版
8+
9+
## 缘由
10+
在学习算法导论的过程中,本人经过几次阅读做了两轮笔记之后发现,要想掌握算法的思想必须动手实践。
11+
12+
* 《算法导论》中的算法全部是用伪代码写的,因此大量的语言细节被忽略。比如边界条件的处理
13+
* 在算法转换为代码过程中会对算法有着更深刻的理解
14+
15+
因此在去年底我在电脑上对算法导论的算法用C++实现了一遍。为了更好地促进学习,现在我将这些代码进行了整理(主要是增加了`Doxygen`注释,以及利用`gooletest`增加了测试代码)
16+
17+
## 结构
18+
19+
* 文件结构
20+
21+
```
22+
src\
23+
google_test\ : gooletest框架的两个文件:gtest.h以及gtest_all.c
24+
sort_algorithms\ :所有排序算法
25+
.... :其他算法
26+
doc\ :由doxygen自动生成的文档
27+
Doxyfile :doxygen配置文件
28+
Introduction_to_Algorithms.pro :Qt项目配置文件
29+
```
30+
* 本项目是利用Qt开发,因此未给出Makefile文件
31+
* 本项目所有算法都是用 `C++ Template`实现。
32+
* 本项目所有算法都有测试代码。如快速排序在`quicksort.h`中,快速排序的测试代码在`quicksort_test.h`中,二者位于同一目录下
33+
* 本项目所有的命名空间、函数、类以及必要的成员都打上了`doxygen`注释,可以方便的进行文档化
34+
35+
**本文档仅用于个人学习目的,未经许可不得用于商业目的,转载请注明出处**
36+
37+
**email: [email protected]**

deployment.pri

+191
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
# This file was generated by an application wizard of Qt Creator.
2+
# The code below handles deployment to Android and Maemo, aswell as copying
3+
# of the application data to shadow build directories on desktop.
4+
# It is recommended not to modify this file, since newer versions of Qt Creator
5+
# may offer an updated version of it.
6+
7+
defineTest(qtcAddDeployment) {
8+
for(deploymentfolder, DEPLOYMENTFOLDERS) {
9+
item = item$${deploymentfolder}
10+
greaterThan(QT_MAJOR_VERSION, 4) {
11+
itemsources = $${item}.files
12+
} else {
13+
itemsources = $${item}.sources
14+
}
15+
$$itemsources = $$eval($${deploymentfolder}.source)
16+
itempath = $${item}.path
17+
$$itempath= $$eval($${deploymentfolder}.target)
18+
export($$itemsources)
19+
export($$itempath)
20+
DEPLOYMENT += $$item
21+
}
22+
23+
MAINPROFILEPWD = $$PWD
24+
25+
android-no-sdk {
26+
for(deploymentfolder, DEPLOYMENTFOLDERS) {
27+
item = item$${deploymentfolder}
28+
itemfiles = $${item}.files
29+
$$itemfiles = $$eval($${deploymentfolder}.source)
30+
itempath = $${item}.path
31+
$$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)
32+
export($$itemfiles)
33+
export($$itempath)
34+
INSTALLS += $$item
35+
}
36+
37+
target.path = /data/user/qt
38+
39+
export(target.path)
40+
INSTALLS += target
41+
} else:android {
42+
for(deploymentfolder, DEPLOYMENTFOLDERS) {
43+
item = item$${deploymentfolder}
44+
itemfiles = $${item}.files
45+
$$itemfiles = $$eval($${deploymentfolder}.source)
46+
itempath = $${item}.path
47+
$$itempath = /assets/$$eval($${deploymentfolder}.target)
48+
export($$itemfiles)
49+
export($$itempath)
50+
INSTALLS += $$item
51+
}
52+
53+
x86 {
54+
target.path = /libs/x86
55+
} else: armeabi-v7a {
56+
target.path = /libs/armeabi-v7a
57+
} else {
58+
target.path = /libs/armeabi
59+
}
60+
61+
export(target.path)
62+
INSTALLS += target
63+
} else:win32 {
64+
copyCommand =
65+
for(deploymentfolder, DEPLOYMENTFOLDERS) {
66+
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
67+
source = $$replace(source, /, \\)
68+
sourcePathSegments = $$split(source, \\)
69+
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)
70+
target = $$replace(target, /, \\)
71+
target ~= s,\\\\\\.?\\\\,\\,
72+
!isEqual(source,$$target) {
73+
!isEmpty(copyCommand):copyCommand += &&
74+
isEqual(QMAKE_DIR_SEP, \\) {
75+
copyCommand += $(COPY_DIR) \"$$source\" \"$$target\"
76+
} else {
77+
source = $$replace(source, \\\\, /)
78+
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
79+
target = $$replace(target, \\\\, /)
80+
copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\"
81+
}
82+
}
83+
}
84+
!isEmpty(copyCommand) {
85+
copyCommand = @echo Copying application data... && $$copyCommand
86+
copydeploymentfolders.commands = $$copyCommand
87+
first.depends = $(first) copydeploymentfolders
88+
export(first.depends)
89+
export(copydeploymentfolders.commands)
90+
QMAKE_EXTRA_TARGETS += first copydeploymentfolders
91+
}
92+
} else:ios {
93+
copyCommand =
94+
for(deploymentfolder, DEPLOYMENTFOLDERS) {
95+
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
96+
source = $$replace(source, \\\\, /)
97+
target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)
98+
target = $$replace(target, \\\\, /)
99+
sourcePathSegments = $$split(source, /)
100+
targetFullPath = $$target/$$last(sourcePathSegments)
101+
targetFullPath ~= s,/\\.?/,/,
102+
!isEqual(source,$$targetFullPath) {
103+
!isEmpty(copyCommand):copyCommand += &&
104+
copyCommand += mkdir -p \"$$target\"
105+
copyCommand += && cp -r \"$$source\" \"$$target\"
106+
}
107+
}
108+
!isEmpty(copyCommand) {
109+
copyCommand = echo Copying application data... && $$copyCommand
110+
!isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += ";"
111+
QMAKE_POST_LINK += "$$copyCommand"
112+
export(QMAKE_POST_LINK)
113+
}
114+
} else:unix {
115+
maemo5 {
116+
desktopfile.files = $${TARGET}.desktop
117+
desktopfile.path = /usr/share/applications/hildon
118+
icon.files = $${TARGET}64.png
119+
icon.path = /usr/share/icons/hicolor/64x64/apps
120+
} else:!isEmpty(MEEGO_VERSION_MAJOR) {
121+
desktopfile.files = $${TARGET}_harmattan.desktop
122+
desktopfile.path = /usr/share/applications
123+
icon.files = $${TARGET}80.png
124+
icon.path = /usr/share/icons/hicolor/80x80/apps
125+
} else { # Assumed to be a Desktop Unix
126+
copyCommand =
127+
for(deploymentfolder, DEPLOYMENTFOLDERS) {
128+
source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
129+
source = $$replace(source, \\\\, /)
130+
macx {
131+
target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)
132+
} else {
133+
target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
134+
}
135+
target = $$replace(target, \\\\, /)
136+
sourcePathSegments = $$split(source, /)
137+
targetFullPath = $$target/$$last(sourcePathSegments)
138+
targetFullPath ~= s,/\\.?/,/,
139+
!isEqual(source,$$targetFullPath) {
140+
!isEmpty(copyCommand):copyCommand += &&
141+
copyCommand += $(MKDIR) \"$$target\"
142+
copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\"
143+
}
144+
}
145+
!isEmpty(copyCommand) {
146+
copyCommand = @echo Copying application data... && $$copyCommand
147+
copydeploymentfolders.commands = $$copyCommand
148+
first.depends = $(first) copydeploymentfolders
149+
export(first.depends)
150+
export(copydeploymentfolders.commands)
151+
QMAKE_EXTRA_TARGETS += first copydeploymentfolders
152+
}
153+
}
154+
!isEmpty(target.path) {
155+
installPrefix = $${target.path}
156+
} else {
157+
installPrefix = /opt/$${TARGET}
158+
}
159+
for(deploymentfolder, DEPLOYMENTFOLDERS) {
160+
item = item$${deploymentfolder}
161+
itemfiles = $${item}.files
162+
$$itemfiles = $$eval($${deploymentfolder}.source)
163+
itempath = $${item}.path
164+
$$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)
165+
export($$itemfiles)
166+
export($$itempath)
167+
INSTALLS += $$item
168+
}
169+
170+
!isEmpty(desktopfile.path) {
171+
export(icon.files)
172+
export(icon.path)
173+
export(desktopfile.files)
174+
export(desktopfile.path)
175+
INSTALLS += icon desktopfile
176+
}
177+
178+
isEmpty(target.path) {
179+
target.path = $${installPrefix}/bin
180+
export(target.path)
181+
}
182+
INSTALLS += target
183+
}
184+
185+
export (ICON)
186+
export (INSTALLS)
187+
export (DEPLOYMENT)
188+
export (LIBS)
189+
export (QMAKE_EXTRA_TARGETS)
190+
}
191+

doc/html/arrowdown.png

246 Bytes
Loading

doc/html/arrowright.png

229 Bytes
Loading

doc/html/bc_s.png

676 Bytes
Loading

doc/html/bdwn.png

147 Bytes
Loading

doc/html/closed.png

132 Bytes
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2+
<html xmlns="http://www.w3.org/1999/xhtml">
3+
<head>
4+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6+
<meta name="generator" content="Doxygen 1.8.10"/>
7+
<title>Introduction_to_Algorithms: src Directory Reference</title>
8+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
9+
<script type="text/javascript" src="jquery.js"></script>
10+
<script type="text/javascript" src="dynsections.js"></script>
11+
<link href="navtree.css" rel="stylesheet" type="text/css"/>
12+
<script type="text/javascript" src="resize.js"></script>
13+
<script type="text/javascript" src="navtreedata.js"></script>
14+
<script type="text/javascript" src="navtree.js"></script>
15+
<script type="text/javascript">
16+
$(document).ready(initResizable);
17+
$(window).load(resizeHeight);
18+
</script>
19+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
20+
<script type="text/javascript" src="search/searchdata.js"></script>
21+
<script type="text/javascript" src="search/search.js"></script>
22+
<script type="text/javascript">
23+
$(document).ready(function() { init_search(); });
24+
</script>
25+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
26+
</head>
27+
<body>
28+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
29+
<div id="titlearea">
30+
<table cellspacing="0" cellpadding="0">
31+
<tbody>
32+
<tr style="height: 56px;">
33+
<td id="projectalign" style="padding-left: 0.5em;">
34+
<div id="projectname">Introduction_to_Algorithms
35+
</div>
36+
</td>
37+
</tr>
38+
</tbody>
39+
</table>
40+
</div>
41+
<!-- end header part -->
42+
<!-- Generated by Doxygen 1.8.10 -->
43+
<script type="text/javascript">
44+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
45+
</script>
46+
<div id="navrow1" class="tabs">
47+
<ul class="tablist">
48+
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
49+
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
50+
<li><a href="files.html"><span>Files</span></a></li>
51+
<li>
52+
<div id="MSearchBox" class="MSearchBoxInactive">
53+
<span class="left">
54+
<img id="MSearchSelect" src="search/mag_sel.png"
55+
onmouseover="return searchBox.OnSearchSelectShow()"
56+
onmouseout="return searchBox.OnSearchSelectHide()"
57+
alt=""/>
58+
<input type="text" id="MSearchField" value="Search" accesskey="S"
59+
onfocus="searchBox.OnSearchFieldFocus(true)"
60+
onblur="searchBox.OnSearchFieldFocus(false)"
61+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
62+
</span><span class="right">
63+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
64+
</span>
65+
</div>
66+
</li>
67+
</ul>
68+
</div>
69+
</div><!-- top -->
70+
<div id="side-nav" class="ui-resizable side-nav-resizable">
71+
<div id="nav-tree">
72+
<div id="nav-tree-contents">
73+
<div id="nav-sync" class="sync"></div>
74+
</div>
75+
</div>
76+
<div id="splitbar" style="-moz-user-select:none;"
77+
class="ui-resizable-handle">
78+
</div>
79+
</div>
80+
<script type="text/javascript">
81+
$(document).ready(function(){initNavTree('dir_68267d1309a1af8e8297ef4c3efbcdba.html','');});
82+
</script>
83+
<div id="doc-content">
84+
<!-- window showing the filter options -->
85+
<div id="MSearchSelectWindow"
86+
onmouseover="return searchBox.OnSearchSelectShow()"
87+
onmouseout="return searchBox.OnSearchSelectHide()"
88+
onkeydown="return searchBox.OnSearchSelectKey(event)">
89+
</div>
90+
91+
<!-- iframe showing the search results (closed by default) -->
92+
<div id="MSearchResultsWindow">
93+
<iframe src="javascript:void(0)" frameborder="0"
94+
name="MSearchResults" id="MSearchResults">
95+
</iframe>
96+
</div>
97+
98+
<div class="header">
99+
<div class="headertitle">
100+
<div class="title">src Directory Reference</div> </div>
101+
</div><!--header-->
102+
<div class="contents">
103+
<table class="memberdecls">
104+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
105+
Directories</h2></td></tr>
106+
<tr class="memitem:dir_c379f539dad97fe67ea6a34e94288564"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_c379f539dad97fe67ea6a34e94288564.html">sort_algorithms</a></td></tr>
107+
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
108+
</table><table class="memberdecls">
109+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
110+
Files</h2></td></tr>
111+
<tr class="memitem:tools_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tools_8h.html">tools.h</a> <a href="tools_8h_source.html">[code]</a></td></tr>
112+
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
113+
</table>
114+
</div><!-- contents -->
115+
</div><!-- doc-content -->
116+
<!-- start footer part -->
117+
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
118+
<ul>
119+
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li>
120+
<li class="footer">Generated by
121+
<a href="http://www.doxygen.org/index.html">
122+
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.10 </li>
123+
</ul>
124+
</div>
125+
</body>
126+
</html>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
var dir_68267d1309a1af8e8297ef4c3efbcdba =
2+
[
3+
[ "sort_algorithms", "dir_c379f539dad97fe67ea6a34e94288564.html", "dir_c379f539dad97fe67ea6a34e94288564" ],
4+
[ "tools.h", "tools_8h.html", null ]
5+
];

0 commit comments

Comments
 (0)