框架

数组内有很多0元素,通常没有问题,但是我项目中出现要排序的是保存结构体指针的链表元素,其中可能有空元素,明明有节点,但是没有数据的情况。

这种情况有时应该放开头,有时放结尾,有时直接删除掉(也许是排序后)。

说了这么多,也不是这篇所写的内容

#include <stdio.h>//升序
void qsort(size_t* _arr, size_t _low, size_t _high) ;//降序
void qsort2(size_t* _arr, size_t _low, size_t _high) ;void show(size_t* _arr, size_t _len) {printf("arr:\n");for (size_t i = 0; i < 20; ++i)printf("%4d", i);printf("\n");for (size_t i = 0; i < 20; ++i)printf("%4d", _arr[i]);printf("\n");
}int main(void) {size_t arr[20] = { 12,34,23,212,45,1,2,0,18,12,3 };       show(arr, 20);qsort(arr, 0, 20 - 1);show(arr, 20);return 0;
}

升序

void qsort(size_t* _arr, size_t _low, size_t _high) {if (_low >= _high) return;size_t l = _low;size_t h = _high;size_t key = _arr[_low];size_t t;while (l != h) {//在右边找小于等于key的元素while (l < h &&  _arr[h] > key) --h;//在左边找大于key的元素while (l < h &&  _arr[l] <= key) ++l;//交换左右找到的两个元素if (l < h) {t = _arr[l];_arr[l] = _arr[h];_arr[h] = t;}}//循环中出来后l和h重合了,所以第一个元素交换到中间去_arr[_low] = _arr[l];_arr[l] = key;//以第一个元素为分界线qsort(_arr, _low, l - 1);qsort(_arr, l + 1, _high);
}

效果

arr:0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  1912  34  23 212  45   1   2   0  18  12   3   0   0   0   0   0   0   0   0   0
arr:0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  190   0   0   0   0   0   0   0   0   0   1   2   3  12  12  18  23  34  45 212

降序

void qsort2(size_t* _arr, size_t _low, size_t _high) {if (_low >= _high) return;size_t l = _low;size_t h = _high;size_t key = _arr[_high];size_t t;while (l != h) {//在左边找小于等于key的元素while (l < h && _arr[l] > key) ++l;//在右边找大于key的元素while (l < h && _arr[h] <= key) --h;      //交换左右找到的两个元素if (l < h) {t = _arr[l];_arr[l] = _arr[h];_arr[h] = t;}}//循环中出来后l和h重合了,所以最后一个元素交换到中间去_arr[_high] = _arr[h];_arr[h] = key;//以最后一个元素为分界线qsort2(_arr, _low, h - 1);qsort2(_arr, h + 1, _high);
}

效果

arr:0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  1912  34  23 212  45   1   2   0  18  12   3   0   0   0   0   0   0   0   0   0
arr:0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19212  45  34  23  18  12  12   3   2   1   0   0   0   0   0   0   0   0   0   0

升序降序的区别

  1. 左右找的基准元素不同,升序找第一个,降序找最后一个(PS:有时是随机找的)
  2. 左右找的元素大小不同,升序时左边找大于基准的,右边找小于基准的。降序时左边找小于基准的,右边找大于基准的
  3. 左右开始扫描的顺序不同,升序时右边指针先开始,降序时左边指针先开始

【C】双边循环快速排序,升序和降序的区别相关推荐

  1. java comparator 降序排序_【转】java comparator 升序、降序、倒序从源码角度理解

    原文链接:https://blog.csdn.net/u013066244/article/details/78997869 环境 jdk:1.7+ 前言 之前我写过关于comparator的理解,但 ...

  2. mysql同时满足升序和降序_MySQL性能优化(三):索引

    点击上方蓝色"码农架构",选择"设为星标" 专注于高可用.高性能.高并发类技术分享! 索引原理 如果一本新华字典假如没有目录,想要查找某个字,就不得不从第一页开 ...

  3. java list逆序_Java的数组和list升序,降序,逆序函数Collections.sort和Arrays.sort的使用...

    list升序,降序,逆序 Listlist =new ArrayList(); //如果list是 5 7 2 6 8 1 4 1.升序: Collections.sort(list) //list: ...

  4. js数组去重排序(升序、降序、随机)方法

    js原生去重排序 var hhl = [1, 5, 6, 3, 2, 7, 6, 1, 5, 4, 8, 6, 9]var newArr = [];//创建一个新数组var isRepeat = fa ...

  5. 【Java】用sort实现对数组的升序和降序排序

    Java 用 sort 实现对数组的升序和降序排序 一.ArrayList 的升序与降序 二.数组升序 三.数组降序 方法一 方法二 一.ArrayList 的升序与降序 升序:Collections ...

  6. java中升序 降序怎么表示_Java sort()数组排序(升序和降序)

    我们在学习 Java 的过程中肯定会遇到对数组进行升序或降序等排序问题,本节主要介绍如何实现 Java 数组的升序和降序.Java 语言使用 Arrays 类提供的 sort() 方法来对数组进行排序 ...

  7. WinForm绘制带有升序、降序的柱形图

    WinForm绘制带有升序.降序的柱形图 private void HuiZhiTu( string strPaiXu){//初始数据int[] nums = { 150, 89, 200, 60, ...

  8. 输入整型数组和排序标识,对其元素按照升序或降序进行排序(华为OJ系列)

    输入整型数组和排序标识,对其元素按照升序或降序进行排序接口说明原型:void sortIntegerArray(Integer[] pIntegerArray, int iSortFlag);输入参数 ...

  9. c#sort升序还是降序_被玩坏的数组排序之sort函数

    JavaScript 的数组排序是一个非常常见业务场景 ECMAScript 为数组提供了一个原生的sort函数,今天我们就来好好看看你对sort函数究竟了解多少. 首先我们来看一下sort函数的基本 ...

最新文章

  1. android 拼图课程设计,Flash拼图游戏制作课程设计报告
  2. java多层catch语句_Java异常之catch语句块
  3. DateTime时间格式转换为Unix时间戳格式
  4. C语言编码小球斜抛运动,利用C4droid绘制小球斜抛运动轨迹(考虑空气阻力)
  5. 今年的hsctf里遇到了一个比较少见的nds逆向题目,侥幸拿下一血
  6. 02 | 日志系统:一条SQL更新语句是如何执行的? 笔记(转)
  7. AC自动机 HDOJ 2222 Keywords Search
  8. 【ZZ】ubuntu9.10桌面版使用(一)基础安装配置
  9. envi安装成功教程 附下载地址
  10. Python2笨方法学习Python--习题二:注释和井号
  11. 移动通信原理中信道的分类
  12. html5方框的箭头怎么弄,纯CSS-带箭头的DIV方框
  13. DDI(DNS、DHCP和IPAM)解决方案的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. Java学习06–前端基础之HTML
  15. 【C语言】动态申请空间
  16. PHP税前税后,请问下大家 怎么根据税后工资1万元推算出税前工资是多少
  17. 十分钟带你做一个学生管理系统
  18. 玩转群晖NAS套件系列五:Moments的安装与使用保姆级教程!
  19. Maven学习笔记,动力节点maven教程随堂笔记(史上最全)
  20. 小程序生成图片保存到系统相册_电子相册怎么做 快速制作电子相册方法

热门文章

  1. ActiveMQ——基于Zookeeper搭建Replicated LevelDB集群
  2. docker(11、Docker Swarm4)11、副本数量(replicated 和 global )12、Label 控制 Service 的位置 13、如何配置 Health Check
  3. Terracotta简单使用
  4. 城市污泥类毕业论文文献有哪些?
  5. “我爱淘”冲刺阶段Scrum站立会议2
  6. 缺少linux内核,Linux内核态缺页会发生什么?一文玩转Exception fixup表
  7. 联想LePad平板电脑不久上市
  8. 【java】【贪心算法】换零钱问题
  9. 逻辑与和按位与、逻辑或和按位或的区别
  10. Editor HDU 4699