当前位置: 首页 > 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/733751/

相关文章:

  • 网站图标 psd邯郸教育网站建设
  • 成都青羊建设厅官方网站代码优化网站排名
  • 注册公司代理费用沧州网站建设制作设计优化
  • 部门网站的开发 意义怎么做自己的html网站
  • 哪些是+joomla做的网站商务电商网站建设
  • 电子网站建贵州网络推广介绍
  • 电子商务网站规划做设计的地图网站有哪些
  • 苏宁网站优化与推广天津网站推广优化
  • 介绍在家里做的点心的网站wordpress页面分析插件
  • 上海建站价格树莓派怎么打开 wordpress
  • 网站建设邀标比选国家信息公示网查营业执照
  • 合肥模板建站多少钱做网站cookie传值
  • 亳州有做网站的吗购物商城起名
  • 乐山网站建设流程苏州网站建设情况
  • 网站的图片怎么制作天津市房地产官网
  • 百顺网站建设做一个软件要多少钱
  • 杭州网站建设杭州手机网站建设营销推广费用包括哪些
  • app网站开发成功案例创建公司网站需要注意什么
  • 有什么展厅设计做的好的网站wordpress api文章列表接口
  • 网站开发时建立有效的()
  • 上住房和城乡建设部网站网站建设岗位工作职责
  • 小米路由HD可以做网站吗网站建设技术外包
  • 设计网站pc版想学电商从什么学起
  • 网站管理机制建设情况网站开发怎么拉客户
  • 专业做网站建设公微信公众号与网站绑定
  • 电商网站建设的维护要多少钱海外网站开发
  • 综合门户网站建设方案织梦二次开发手机网站
  • 石家庄网站建设德信互联科技有限公司小程序开发平台售后服务怎样
  • 霸州网站制作为什么要做网站优化
  • 2016企业网站模板中文wordpress修改固定连接404