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

基于C#实现奇偶排序

这篇就从简单一点的一个“奇偶排序”说起吧,不过这个排序还是蛮有意思的,严格来说复杂度是 O(N2),不过在多核的情况下,可以做到 N2 /(m/2)的效率,这里的 m 就是待排序的个数,当 m=100,复杂度为 N2 /50,还行把,比冒泡要好点,因为重点是解决问题的奇思妙想。
下面我们看看这个算法是怎么描述的,既然是奇偶,肯定跟位数有关了

  1. 先将待排序数组的所有奇数位与自己身后相邻的偶数位相比较,如果前者大于后者,则进行交换,直到这一趟结束。
  2. 然后将偶数位与自己身后相邻的奇数位相比较,如果前者大于后者,则进行交换,直到这一趟结束。
  3. 重复 1,2 的步骤,直到发现无“奇偶”,“偶奇” 交换的时候,就认为排序完毕,此时退出循环。
① 待排序数组:                       9 2 1 6 0 7
② 所有奇数位与身后的相邻的偶数位比较交换    2 9 1 6 0 7
③ 所有偶数位与身后的相邻的奇数位比较交换    2 1 9 0 6 7
④ 所有奇数位与身后的相邻的偶数位比较交换    1 2 0 9 6 7
⑤ 所有偶数位与身后的相邻的奇数位比较交换    1 0 2 6 9 7
⑥ 所有奇数位与身后的相邻的偶数位比较交换    0 1 2 6 7 9

我们可以看到,经过 5 趟排序后,我们的数组就排序完毕了,从图中 ② 可以看到,如果每个线程分摊一个奇数位,那交换是不是只要一次就够了呢,可以看到这个算法在多核处理下面还是很有优势的。
最后的运行代码:

 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xml.Xsl;namespace ConsoleApplication1{class Program{static void Main(string[] args){List<int> list = new List<int>() { 9, 2, 1, 6, 0, 7 };Console.WriteLine("\n排序前 => " + string.Join(",", list));list = OddEvenSort(list);Console.WriteLine("\n排序后 => " + string.Join(",", list));Console.Read();}static List<int> OddEvenSort(List<int> list){var isSorted = false;//如果还没有排序完,就需要继续排序,知道没有交换为止while (!isSorted){//先默认已经排序完了isSorted = true;//先进行 奇数位 排序for (int i = 0; i < list.Count; i = i + 2){//如果 前者 大于 后者,则需要进行交换操作,也要防止边界if (i + 1 < list.Count && list[i] > list[i + 1]){var temp = list[i];list[i] = list[i + 1];list[i + 1] = temp;//说明存在过排序,还没有排序完isSorted = false;}}//再进行 奇数位 排序for (int i = 1; i < list.Count; i = i + 2){//如果 前者 大于 后者,则需要进行交换操作,也要防止边界if (i + 1 < list.Count && list[i] > list[i + 1]){var temp = list[i];list[i] = list[i + 1];list[i + 1] = temp;//说明存在过排序,还没有排序完isSorted = false;}}}return list;}}}

image.png

http://www.lryc.cn/news/246591.html

相关文章:

  • Kibana部署
  • 【Linux】了解进程的基础知识
  • ES6 — ES14 新特性
  • 附录12-time.h的常用方法
  • C语言公交车之谜(ZZULIOJ1232:公交车之谜)
  • Liunx Ubuntu Server 安装配置 Docker
  • Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务
  • druid keepAlive 导致数据库连接数飙升
  • 四川竹哲电子商务有限公司深耕抖音电商服务领域
  • 爬虫中XPath语法四个重要概念及示例
  • MySQL-03-索引
  • CSS-长度单位篇
  • 自己动手实现一个深度学习算法——七、卷积神经网络
  • office word 使用笔记
  • vue中下载文件后无法打开的坑
  • 【追求卓越04】数据结构--栈与队列
  • 基于SpringBoot的超市信息管理系
  • 【计算机组成原理】存储系统
  • 基于SSM的旅游管理系统设计与实现
  • JeecgBoot3.0 漏洞升级 — 快速文档
  • 6.一维数组——用冒泡法,选择法将5个整数由大到小排序
  • YOLOv8 onnx 文件推理多线程加速视频流
  • CVE-2017-12615 文件上传
  • c++没有返回值的返回值
  • 全网最全卡方检验汇总
  • Java基础-中级-高级面试题汇(一)
  • 数据结构 / day04 作业
  • Java核心知识点整理大全20-笔记
  • Spark---转换算子、行动算子、持久化算子
  • 什么是关系型数据库?