C++常见面试题——内排序

C++常见面试题——内排序

ID:40553804

大小:14.43 KB

页数:7页

时间:2019-08-04

C++常见面试题——内排序_第1页
C++常见面试题——内排序_第2页
C++常见面试题——内排序_第3页
C++常见面试题——内排序_第4页
C++常见面试题——内排序_第5页
资源描述:

《C++常见面试题——内排序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、对数组p[n]排序1.插入排序1.1直接插入排序一趟排序:第i趟排序,此时其0...i-1个元素时有序的,相当于把p[i]插入前0...i-1个有序序列中,形成新的有序序列0...i。整个排序过程:对i从1...n-1重复执行上述一趟排序时间复杂度:O(n2),稳定排序viewplaincopytoclipboardprint?//straightinsertionsortvoidstraight_insertion_sort(intp[],intn){inti=0;for(i=1;i=1;--j){if(tmp

2、[j-1]){p[j]=p[j-1];}else{break;}}p[j]=tmp;}}1.2折半插入排序和直接插入排序唯一不同的是,第i趟排序中,因为0...i-1个元素有序,采用折半查找,来确定p[i]的插入位置时间复杂度:O(n2),稳定排序viewplaincopytoclipboardprint?//binaryinsertionsortvoidbinary_insertion_sort(intp[],intn){inti=0;for(i=1;i

3、igh)/2;if(tmplow);--j){p[j]=p[j-1];}if(j==low)p[low]=tmp;}}1.3希尔插入排序思想:在直接插入排序中,当待排元素基本有序时,直接插入排序的时间复杂度趋近去O(n)。所以先将整个待排序列分割成若干个子序列进行直接插入排序,但这个序列基本有序时,进行一次直接插入排序。一趟排序:按步长dk将待排元素分成若干子序列,对这些子序列直

4、接插入排序整个排序过程:步长从n/2指数递减至1,结束时间复杂度:O(n*logn),不稳定排序viewplaincopytoclipboardprint?//shellinsertionsortvoidone_way_shell_insertion_sort(intp[],intn,intdk){inti=0;for(i=dk;i=dk;j=j-dk){if(tmp

5、p[],intn){intdk=0;dk=n/2;while(dk>=1){one_way_shell_insertion_sort(p,n,dk);dk=dk/2;}}2.交换排序2.1冒泡排序一趟排序:第i趟,从n-1...i,比较相邻关键字,“逆序”时交换两者,一趟结束时,可以保证第i个最小完整排序过程:i从0...n-1,重复一趟排序时间复杂度:O(n2),稳定排序viewplaincopytoclipboardprint?//bubblesortvoidbubble_sort(intp[],intn){inti,j;for(i=0;ii;-

6、-j){if(p[j]

7、high&&p[high]>tmp)--high;if(low

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。