博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快排,归并和Shell排序
阅读量:5030 次
发布时间:2019-06-12

本文共 1711 字,大约阅读时间需要 5 分钟。

快速排序

快速排序的执行流程:

(1) 先从数列中取出一个数作为基准数。

(2) 将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

(3)再对左右区间重复第二步,直到各区间只有一个数。

C程序实现:

int *q_sort(int *arr, int left, int right) {    int i, j, t, temp;    if (left >= right) {        return arr;     }    temp = arr[left]; //选择基准值    i = left;    j = right;    while (i != j) {        while (arr[j] >= temp && i

Shell排序

Shell排序是对插入排序的改进。

Shell排序先选取一定的间隔,相差一个间隔的元素视为一个组,在每组内进行插入排序。

然后选取更小的间隔(一般折半)进行插入排序,直至间隔为1。

C程序实现:

int *shell_sort(int *arr, int Len)  {   int i, j, t, gap;   for (gap = Len / 2; gap > 0; gap /= 2) {    for (i = gap; i < Len; i++) {        for ( j = i - gap; j >= 0 && arr[j] > arr[j + gap]; j -= gap) {            t = arr[j];            arr[j] = arr[j+gap];            arr[j+gap] = t;        }    }   }   return arr;}

归并排序

将待排序序列R[0...n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表;

将这些有序序列再次归并,得到n/4个长度为4的有序序列;如此反复进行下去,最后得到一个长度为n的有序序列。

C程序实现:

void merge_sorting(int *arr, int first,  int last, int *temp) {    int mid = (first + last) / 2;           if (first < last) {        merge_sorting(arr, first, mid, temp);        merge_sorting(arr, mid + 1, last, temp);        merge_array(arr,first, mid, last, temp);    }}void merge_array(int *arr, int first, int mid, int last, int *temp)     {    int i = first, j = mid + 1, k = 0;    int m = mid, n = last;        while (i <= m && j <= n) {        if (arr[i] <= arr[j]) {            temp[k++] = arr[i++];           }        else {            temp[k++] = arr[j++];           }       }    while (i <= m) {        temp[k++] = arr[i++];       }    while (j <= n) {        temp[k++] = arr[j++];       }        for (i = 0; i < k; i++) {        arr[first + i] = temp[i];       }}

转载于:https://www.cnblogs.com/Finley/p/5469156.html

你可能感兴趣的文章
Web项目中的路径问题
查看>>
js随机数的取整
查看>>
关于解析漏洞
查看>>
十大经典预测算法(六)---集成学习(模型融合算法)
查看>>
用php做一个简单的注册用户功能
查看>>
一款基于css3的3D图片翻页切换特效
查看>>
Feign使用Hystrix无效原因及解决方法
查看>>
Sizeof与Strlen的区别与联系
查看>>
hadoop2.2.0_hbase0.96_zookeeper3.4.5全分布式安装文档下载
查看>>
Flutter 贝塞尔曲线切割
查看>>
golang 的编译安装以及supervisord部署
查看>>
阿里架构师,讲述基于微服务的软件架构模式
查看>>
Eclipse导入maven项目时,Pom.xml文件报错处理方法
查看>>
01、JAVA开发准备
查看>>
asp.net mvc 错误处理 - 自定义报错处理,生成错误日志
查看>>
[转]jQuery 选择器和dom操作
查看>>
Jenkins+Maven+SVN快速搭建持续集成环境(转)
查看>>
杜教筛
查看>>
《Ext JS模板与组件基本知识框架图----模板》
查看>>
txmpp
查看>>