题目

快排改良

解决代码及点评

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>#define K 3
void PrintArr(int *pnArr, int nLen)
{for (int i = 0; i < nLen; i++){printf("%d ", pnArr[i]);}printf("\n");
}void Swap(int *p1, int *p2)
{int nTmp = *p1;*p1 = *p2;*p2 = nTmp;
}int Partition(int *pnArr, int nLeft, int nRight)
{int nKey = nRight;int i = nLeft - 1;for (int j = nLeft; j < nRight; j++){if (pnArr[j] < pnArr[nKey]){i++;Swap(&pnArr[i], &pnArr[j]);}}Swap(&pnArr[i+1], &pnArr[nRight]);return i + 1;
}
int RandomPartition(int *pnArr, int nLeft, int nRight)
{srand(time(NULL));int n1 = rand()%(nRight - nLeft + 1) + nLeft;int n2 = rand()%(nRight - nLeft + 1) + nLeft;int n3 = rand()%(nRight - nLeft + 1) + nLeft;int nKey = (n1+n2+n3) / 3;Swap(&pnArr[nKey], &pnArr[nRight]);return Partition(pnArr, nLeft, nRight);
}void InsertSort(int *pnArr, int nLeft, int nRight)
{for (int i = nLeft + 1; i <= nRight; i++){int nTmp = pnArr[i];int j;for (j = i; j > nLeft && nTmp <pnArr[j-1]; j--){pnArr[j] = pnArr[j-1];}pnArr[j] = nTmp;}
}
void QuickSort(int *pnArr, int nLeft, int nRight)
{if (nLeft < nRight){if (nRight - nLeft > K){int nTmpPos = RandomPartition(pnArr, nLeft, nRight);QuickSort(pnArr, nLeft, nTmpPos - 1);QuickSort(pnArr, nTmpPos + 1, nRight);}else{InsertSort(pnArr, nLeft, nRight);}}
}
int main()
{int nArr[10] = {42,1,3,2,16,9,10,14,8,17}; PrintArr(nArr, 10);QuickSort(nArr, 0,9);PrintArr(nArr, 10);system("pause");return 0;
}

代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6858815

解压密码:c.itcast.cn

下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”

2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行

程序运行结果






转载于:https://www.cnblogs.com/niulanshan/p/6175057.html

基于visual Studio2013解决算法导论之011快排改良相关推荐

  1. 基于visual Studio2013解决算法导论之007优先队列(堆实现)

     题目 优先队列 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #in ...

  2. 基于visual Studio2013解决算法导论之012计数排序

     题目 计数排序 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #in ...

  3. 基于visual Studio2013解决算法导论之019栈实现(基于数组)

     题目 用数组实现栈 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #in ...

  4. 基于visual Studio2013解决C语言竞赛题之1049抓牌排序

       题目 解决代码及点评 /* 功能:插入排序.许多玩牌的人是以这样的方式来对他们手中的牌进行排序的:设手中原有3张牌已排好序,抓1张新牌,若这张新牌的次序在原来的第2张牌之后,第3张牌 ...

  5. 基于visual Studio2013解决面试题之0410计算二进制中1的个数

     题目 解决代码及点评 /*求一个数中,二进制表示方式中1的个数范例算法采用分治思想,通过位操作计算二进制中1的个数 */#include <iostream> using name ...

  6. 基于visual Studio2013解决面试题之0901奇偶站队

     题目 解决代码及点评 /*给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数 解决方法:两边同时遍历,如果遇到左边偶数或者右边基数,则交换 */#include <ios ...

  7. 基于visual Studio2013解决面试题之0403串联字符串

     题目 解决代码及点评 /*有 n个长为 m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环 ...

  8. 基于visual Studio2013解决面试题之0804复杂链表

     题目 解决代码及点评 /*复杂链表的拷贝,现在有一个复杂链表,完成一个clone函数拷贝一个链表复杂链表是指struct Node{struct Node* _next;struct Node ...

  9. 基于visual Studio2013解决面试题之0209最大堆排序

     题目 解决代码及点评 /*最大堆是一个数组数据结构,任意一个下标i,它的值大于i*2和i*2+1的值(i从1开始)当这样的堆形成时,最大值在数组最开始的位置.当这样的堆形成后,将第一个元素交换 ...

最新文章

  1. 上传图片时出现Request 对象 错误 'ASP 0104 80004005'
  2. [转] ASP.NET1.1(C#)中验证码产生的原理及应用
  3. iOS之深入解析内存管理的引用计数retainCount的底层原理
  4. 机器学习_机器不学习:从Spark MLlib到美图机器学习框架实践
  5. pom.xml中的artifactId是什么意思?
  6. 2018 年最受欢迎的 Python 库,你都用过吗?
  7. CSDN博客投票活动开始了
  8. web中hasmoreelements_Web开发模式【Mode I 和Mode II的介绍、应用案例】
  9. c++byte数组和文件的相互转换_经常对文件相互转换,全能转换工具,解决办公中遇到的所有难题...
  10. C#编写程序监测某个文件夹内是否有文件进行了增,删,改的动作?
  11. 监督式学习、 非监督式学习、强化学习
  12. 运筹OR帷幄,运筹优化的剖析与应用
  13. WPS 2005看起来还是蛮不错的
  14. 计算机管理显示磁盘未知,磁盘未知,未初始化或未分配问题的解决方案
  15. arduino(14):使用ESP8266加蜂鸣器,自己动手做歌曲,使用python 程序,做简单的五线谱转换。直接把音节和节拍转换,然后转换成数据,用蜂鸣器播放歌曲《下山》。。
  16. linux格式化为fat,linux下把u盘格式化成 FAT32的例子
  17. 3dmax中的UVW 贴图修改器详解(史上最全)
  18. 金蝶软件连接显示服务器超时,金蝶连接云服务器超时
  19. Column 'id' in where clause is ambiguous
  20. Linux之带wiringPi库的交叉编译

热门文章

  1. coding pages绑定freenom.com域名
  2. Backbone发展与语义分割网络发展
  3. intellij中出現java.lang.NoClassDefFoundError: org/apache/commons/configuration/Configuration解決方案
  4. 图像处理理论(一)——直方图、二值化、滤波基础
  5. python编程注释_自学python编程笔记之:python的注释
  6. ocelot简单入门
  7. 机器学习入门-文本数据-使用聚类增加文本的标签属性
  8. 为什么说5G会提前于2018年到来?
  9. Git使用技巧(1)-- 配置【持续更新】
  10. 跨域iframe的高度自适应