当前位置: 首页 > news >正文

局机关网站建设改进措施装修网站合作

局机关网站建设改进措施,装修网站合作,我要建网站,公司架构引言:快速排序作为一种非常经典且高效的排序算法,无论是工作还是面试中广泛用到,作为一种分治思想,需要熟悉递归思想。下面来讲讲快速排序的实现和改进。 老规矩,先用图解来理解一下:(这里使用快…

引言:快速排序作为一种非常经典且高效的排序算法,无论是工作还是面试中广泛用到,作为一种分治思想,需要熟悉递归思想。下面来讲讲快速排序的实现和改进。

老规矩,先用图解来理解一下:(这里使用快速排序中的“挖坑法”)

笔误:下面这个图right是--的! 

 

 

  以此往复

下面是代码:

void dfs_quick_sort(int* arry, int left, int right) {if ((right - left) <= 0) return;//添加一个三数取中的操作int key = arry[left];int end = right;int begin = left;while (left < right) {while (left < right && arry[right] >= key) {right--;}arry[left] = arry[right];while (left < right && arry[left] <= key) {left++;}arry[right] = arry[left];}arry[right] = key;dfs_quick_sort(arry,begin, left - 1);dfs_quick_sort(arry,right + 1, end);
}
//挖坑法
void quick_sort(int* arry, int size) {assert(arry);dfs_quick_sort(arry, 0, size - 1);
}

测试代码:

void test_quick_sort(int* arry, int size) {Printf(arry, size);quick_sort(arry, size);Printf(arry, size);
}
int main() {int arry[] = { 2,3,1,6,21,78,11,36,11,11,9 };int len = sizeof(arry) / sizeof(arry[0]);//test_insertion_sort(arry, len);//est_shell_sort(arry, len);//test_select_sort(arry, len);//test_heap_sort(arry, len);//test_bubble_sort(arry, len);test_quick_sort(arry, len);return 0;
}

MORE:试想如果刚刚演示的图中,一开始取到的不是1,而是5,是不是步骤会少很多,因为如果拿到的是排好序后的中间数,这个数左边是比他小的,右边是比他大的,每次这样,相当于每次都二分,这样向下递归层数就是logN,而如果每次拿到的key是最大或最小的数,第一次操作完还剩n-1个,第二次还剩n-2....。层数为n层,时间复杂度为N^2。

所以我们要尽量选到一个靠近排序好的中间的数,不要选到最大或最小的数为key。

下面将代码进行改进:(取最左边和最右边和中间三个值中的中间数)

int mid_quick_number(int* arry, int left, int right) {int mid = left + (right - left >> 1);//去中间数防止普通求中间数溢出问题if (arry[mid] > arry[left]) {if (arry[right] > arry[mid]) {mid = mid;}else if(arry[right]>arry[left]){mid = right;}else {mid = left;}}else {if (arry[right] < arry[mid]) {mid = mid;}else if (arry[right] > arry[left]) {mid = left;}else {mid = right;}}return mid;
}
void dfs_quick_sort(int* arry, int left, int right) {if ((right - left) <= 0) return;//添加一个三数取中的操作int mid = mid_quick_number(arry, left, right);swap(arry + mid, arry+left);int key = arry[left];int end = right;int begin = left;while (left < right) {while (left < right && arry[right] >= key) {right--;}arry[left] = arry[right];while (left < right && arry[left] <= key) {left++;}arry[right] = arry[left];}arry[right] = key;dfs_quick_sort(arry,begin, left - 1);dfs_quick_sort(arry,right + 1, end);
}
//挖坑法
void quick_sort(int* arry, int size) {assert(arry);dfs_quick_sort(arry, 0, size - 1);
}
http://www.yayakq.cn/news/127554/

相关文章:

  • _网站建设网站个人免费建站系统
  • mvc5网站开发之美电子版ae成品免费下载网站
  • 申请域名就可以做网站了吗织梦网站最下面的网站建设去除
  • 和外国人做ic生意的网站企业网站策划书范文3000字
  • 那个公司做网站怎么开彩票网站做站长
  • 网站保姆-源码下载北京工程建设交易信息网官网
  • 包工头接活平台小工程江门seo培训
  • 网站开发有哪些风险wordpress 缓存在那
  • 宜昌网站建设宜昌怎么做网站或APP
  • 网站上的qq如何做悬浮环保网站模板
  • pc网站优化排名汽车租赁网站建设内容
  • 国外打开网站会不会乱码为何要网站优化
  • 网站后台问题网站添加百度统计代码吗
  • 基于html5的移动端网站开发营销推广策划及渠道
  • 百度联盟网站怎么做江苏高效网站制作机构
  • 兰州优秀网站推广威胁网站检测平台建设中标
  • 洛阳400电话洛阳网站seo网站建站管
  • 网站服务器在国外的如何做百度推广优秀设计赏析网站
  • 淘宝做网站推广怎么样微信建设网站
  • 局域网站建设银行信用卡网站关键词设置
  • 我用织梦5.7做个网站应该把淘宝客店铺链接放到哪网站广告的优势
  • 温州cms建站系统仿百度百科网站源码
  • 建设电玩网站专利减缓在哪个网站上做
  • 做网站教学广州软件学院
  • 找谁做公司网站网站开发实训指导书
  • 企业展示网站开发绵阳网站建设 经开区
  • 平台网站空间自己接单的平台
  • 济南网站制作建设php网站开发工程师
  • 网站开发学哪些郑州新闻最新消息
  • 零售网站制作网站空间怎么选择