几种内部排序算法总结!(冒泡排序、快速排序、直接插入排序、拆半插入排序、简单选择排序)
1 #include
2 using namespace std;
3
4 /*/////////////////////////////////////////////////////////////////////////
5 以下为快速排序
6 /////////////////////////////////////////////////////////////////////////*/
7 /*
8 冒泡排序
9 算法:
10 核心思想是扫描数据清单,寻找出现乱序的两个相邻的项目。当找到这两个项目后
11 交换项目的位置然后继续扫描。重复上面的操作直到所有的项目都按顺序排好
12 时间复杂度n*n (n-1)*n/2
13 */
14 void BubbleSortData(int SortData[], int Length)
15 {
16 int tmpData =0;
17 bool swapFlag =true;
18
19 for (int i=Length-1; i>0 && swapFlag; i--)
20 {
21 swapFlag =false;
22 for(int j=0; j SortData[j+1])
25 {
26 tmpData =SortData[j];
27 SortData[j] =SortData[j+1];
28 SortData[j+1] =tmpData;
29 swapFlag =true;
30 }
31 }
32 }
33
34 return;
35 }
36 /*
37 快速排序是对起泡排序的一种改进,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键
38 字小,则可分别对这两部分继续进行排序,以达到整个序列有序.
39 交换顺序表L中子表L.r[low..high]的记录,使枢轴记录到位,并返回其所在位置,此时在它之前(后)的记录均不大(小)于它
40 时间复杂度为 n*logn,其平均性能最好,若初始记录序列按关键字有序或基本有序,快速排序将锐化为起泡排序
41 */
42 int Partition(int SortData[], int low, int high)
43 {
44 int tmpData =SortData[low];//用于子表的第一个记录作枢轴记录
45 int temp=0;
46
47 while ( low=tmpData)
51 {
52 high--;
53 }
54 //将比枢轴记录小的记录移到低端
55 SortData[low] =SortData[high];
56
57 while (low=0 && tmpData=high+1; j--)
153 {
154 SortData[j+1] =SortData[j];
155 }
156 SortData[high+1] =tmpData;
157 }
158
159 return;
160 }
161
162
163 //////////////////////////////////////////////////////////////////////////
164
165 /*
166 简单选择排序
167 算法:首先找到数据清单中的最小的数据,然后将这个数据同第一个数据交换位置;接下来找第二小的数据,再将其同第二个数据交换位置,以此类推。
168 所需移动的操作次数最少为0,,最大为3(n-1)
169 然而无论记录的初始排列如何,需要比较的次数相同n(n-1)/2 复杂度为n*n
170 */
171 void SelectSortData(int SortData[], int Length)
172 {
173 int tmpData;
174 int offset =0;
175 int j=0;
176
177 for (int i=0; iSortData[j] )
184 {
185 tmpData =SortData[j];
186 offset =j;
187 }
188 }
189
190 if( offset >i)
191 {
192 SortData[offset] =SortData[i];
193 SortData[i] =tmpData;
194 }
195 }
196
197 return;
198 }
199
200 int main()
201 {
202 //int Buffer[] ={1,2,3,4,5,6};
203 int Buffer[] ={6,5,4,3,2,1};
204
205 QuickSortData(Buffer,0, 5);
206
207 for (int i=0; i<6; i++)
208 {
209 cout<
内部排序常用算法总结
最新推荐文章于 2020-06-29 15:00:16 发布
3162

被折叠的 条评论
为什么被折叠?



