C#的排序算法以及随机产生不重复数字的几个Demo
今天无意看到以前写过的排序算法,顺便又想到随机产生不重复数字的这样一个要求的Demo(经常看到这样一道题目:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。),于是乎就写了一个,不借助于任何集合类,其思想无非就是排序算法的逆向操作。另外顺便把排序算法也粘贴出来。
class Program {static void Main(string[] args) {int[] array = RandomNotRepeatNum(100, 1);foreach (int item in array) { Console.WriteLine(item); } //int[] array = GetRandomNum(100, 1000);//foreach (int item in array)//{// Console.WriteLine(item);//}//Console.WriteLine("排序后");//array = SortShell(array);//foreach (int item in array)//{// Console.WriteLine(item);//} Console.ReadLine(); } /// <summary>/// 随机获取数字/// </summary>/// <param name="count">获取到的数字的个数</param>/// <param name="max">获取的数字的最大值</param>/// <returns></returns> static int[] GetRandomNum(int count, int max) {if (count <= 0)return null; int[] array = new int[count]; Random random = new Random();for (int i = 0; i < count; i++) { array[i] = random.Next(max); } return array; } /// <summary>/// 随机产生不重复数字/// </summary>/// <param name="max"></param>/// <param name="min"></param>/// <returns></returns> static int[] RandomNotRepeatNum(int max, int min) {int count = max - min + 1;int[] array = new int[count]; for (int i = 0; i < count; i++) { array[i] = min; min++; } Random random = new Random();for (int i = 0; i < count; i++) {int temp = random.Next(count);int temp2 = 0; temp2 = array[temp]; array[temp] = array[i]; array[i] = temp2; } return array; } /// <summary>/// 冒泡排序:依次比较相邻的两个数,将小数放在前面,大数放在后面。编程复杂度低,稳定性。/// </summary>/// <param name="sortArray"></param>/// <returns></returns> static int[] SortBubble(int[] sortArray) {if (sortArray == null || sortArray.Length < 2) {return sortArray; } int i, j = 1, temp;bool done = false;while (!done && j < sortArray.Length) { done = true;for (i = 0; i < sortArray.Length - 1; i++) {if (sortArray[i] > sortArray[i + 1]) { done = false; temp = sortArray[i]; sortArray[i] = sortArray[i + 1]; sortArray[i + 1] = temp; } } j++; }return sortArray; } /// <summary>/// 选择排序:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,/// 然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。/// 以此类推,直到所有元素均排序完毕/// </summary>/// <param name="sortArray"></param>/// <returns></returns> static int[] SortSelection(int[] sortArray) {if (sortArray == null || sortArray.Length < 2) {return sortArray; } int i, j = 0, min, temp;while (j < sortArray.Length - 1) { min = j;for (i = j + 1; i < sortArray.Length; i++) {if (sortArray[i] < sortArray[min]) { min = i; } } temp = sortArray[min]; sortArray[min] = sortArray[j]; sortArray[j] = temp; j++; } return sortArray; } /// <summary>/// 插入排序:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,/// 直到全部记录插入完成为止。/// </summary>/// <param name="sortArray"></param>/// <returns></returns> static int[] SortInsert(int[] sortArray) {if (sortArray == null || sortArray.Length < 2) {return sortArray; }int i, j, temp;for (i = 1; i < sortArray.Length; i++) { temp = sortArray[i]; j = i;while (j > 0 && temp < sortArray[j - 1]) { sortArray[j] = sortArray[j - 1]; j--; } sortArray[j] = temp; }return sortArray; } /// <summary>/// 希尔排序:将数组列在一个表中并对列排序(用插入排序)。/// 重复这过程,不过每次用更长的列来进行。/// 最后整个表就只有一列了,最后再进行插入排序。/// </summary>/// <param name="sortArray"></param>/// <returns></returns> static int[] SortShell(int[] sortArray) {if (sortArray == null || sortArray.Length < 2) {return sortArray; } int inc;for (inc = 1; inc <= sortArray.Length / 9; inc = 3 * inc + 1) ;for (; inc > 0; inc /= 3) {for (int i = inc + 1; i <= sortArray.Length; i += inc) {int t = sortArray[i - 1];int j = i;while ((j > inc) && (sortArray[j - inc - 1] > t)) { sortArray[j - 1] = sortArray[j - inc - 1]; j -= inc; } sortArray[j - 1] = t; } }return sortArray; } }
转载于:https://www.cnblogs.com/FreeDong/archive/2012/03/04/2379617.html
C#的排序算法以及随机产生不重复数字的几个Demo相关推荐
- 34.写一个排序算法1-100随机数字进行排序
编程题目: 34.写一个排序算法 1-100随机数字 进行排序,要求效率. 示例代码: package program.calculation.exercise34;/*** 34.写一个排序算法 1 ...
- 猴子捞月排序算法 (随机排序)
RT大佬教的排序算法 平均复杂度O(n!) : n=13 基本已经慢到不行了 ,n再大估计几万年才能出来: 核心代码:do { - } while(next_permutation(k,k+n)); ...
- mysql 随机取不重复数据_随机生成不重复数字,想做Excel抽奖器你必须掌握!
年会期间,大家最期待的便是抽奖环节了,只是有人欢喜有人忧,有的人连续几年每次都能抽中,有的人就像我一样,年年不中.... 人人概率相等,我觉得是不存在的 那如何用Excel做一个简易抽奖器呢?这个你必 ...
- 这或许是东半球分析十大排序算法最好的一篇文章
作者 | 不该相遇在秋天 转载自五分钟学算法(ID:CXYxiaowu) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强 ...
- 中希尔排序例题代码_【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章...
码农有道 历史文章目录(请戳我) 关于码农有道(请戳我) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强烈建议先收藏然后 ...
- 中希尔排序例题代码_超全面分析十大排序算法
点击上方"零一视界",选择"星标"公众号 资源干货,第一时间送达 作者 | 不该相遇在秋天 责编 | 程序员小吴 前言 本文全长 14237 字,配有 70 张 ...
- 详解面试手撕过的那些排序算法
前言 只要去大厂面试,必定有一轮算法面试,而这一轮往往是阻碍程序员面试成功的关键.一个程序员的算法基本功是否扎实能够体现出自身的开发能力,下面我尽可能的把常用的排序算法讲清楚. 排序简介 排序(Sor ...
- 【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章
原地址:https://mp.weixin.qq.com/s?__biz=MzIwNTc4NTEwOQ==&mid=2247486981&idx=1&sn=c63cd080be ...
- 这或许是东半球讲十大排序算法最好的一篇文章
作者 | 不该相遇在秋天 责编 | 程序员小吴 ## 冒泡排序 冒泡排序无疑是最为出名的排序算法之一,从序列的一端开始往另一端冒泡(你可以从左往右冒泡,也可以从右往左冒泡,看心情),依次比较相邻的两个 ...
- 十大排序算法 图解 (pythonjava)
作者 | 不该相遇在秋天 转载自五分钟学算法(ID:CXYxiaowu) 注: 原文使用 java 编程语言,这里我扩展使用 python. 文章目录 No.1 冒泡排序 图解冒泡排序 代码实现 No ...
最新文章
- s5 android5.0内存泄漏,android-最初从位图泄漏了未引用的byte [],但被回收的()导致内存泄漏(直到活动停止)...
- java 异步请求重定向_JavaEE通过response实现请求重定向
- CSS3: 动画循环执行(带延迟)的实现
- vue如何让一句代码只执行一次_lt;Vue 源码笔记系列4gt;异步更新队列与$nextTick...
- 在GNS3中如何让NETFLOW能够捕获到流量
- 找到软件供应链的薄弱链条
- python使用itchat获取微信好友列表
- Windows 7 下玩游戏不能全屏?
- Linux系统下编译连接C源代码
- 当想给下一个请求发送同享的数据时候 可以使用域对象设置属性
- 比赛-h47学长的训练赛 (27 Aug, 2018)
- 【开源项目】CircuitJS1在线电路仿真
- 最近 火火火 的开源项目
- 当前话题管理故事:厨师绑湖蟹 (转载)
- 穆易天气app代码(一)
- 属性的遍历:for...in 循环
- CSDN,我来了!kbd哈哈哈哈/kbd
- (二十六)Fama-French三因素模型及应用
- STL - emplace 与 push 的区别
- Postgresql12主从配置及切换