今天无意看到以前写过的排序算法,顺便又想到随机产生不重复数字的这样一个要求的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相关推荐

  1. 34.写一个排序算法1-100随机数字进行排序

    编程题目: 34.写一个排序算法 1-100随机数字 进行排序,要求效率. 示例代码: package program.calculation.exercise34;/*** 34.写一个排序算法 1 ...

  2. 猴子捞月排序算法 (随机排序)

    RT大佬教的排序算法 平均复杂度O(n!) : n=13 基本已经慢到不行了 ,n再大估计几万年才能出来: 核心代码:do { - } while(next_permutation(k,k+n)); ...

  3. mysql 随机取不重复数据_随机生成不重复数字,想做Excel抽奖器你必须掌握!

    年会期间,大家最期待的便是抽奖环节了,只是有人欢喜有人忧,有的人连续几年每次都能抽中,有的人就像我一样,年年不中.... 人人概率相等,我觉得是不存在的 那如何用Excel做一个简易抽奖器呢?这个你必 ...

  4. 这或许是东半球分析十大排序算法最好的一篇文章

    作者 | 不该相遇在秋天 转载自五分钟学算法(ID:CXYxiaowu) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强 ...

  5. 中希尔排序例题代码_【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章...

    码农有道 历史文章目录(请戳我) 关于码农有道(请戳我) 前言 本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程. 预计阅读时间 47 分钟,强烈建议先收藏然后 ...

  6. 中希尔排序例题代码_超全面分析十大排序算法

    点击上方"零一视界",选择"星标"公众号 资源干货,第一时间送达 作者 | 不该相遇在秋天 责编 | 程序员小吴 前言 本文全长 14237 字,配有 70 张 ...

  7. 详解面试手撕过的那些排序算法

    前言 只要去大厂面试,必定有一轮算法面试,而这一轮往往是阻碍程序员面试成功的关键.一个程序员的算法基本功是否扎实能够体现出自身的开发能力,下面我尽可能的把常用的排序算法讲清楚. 排序简介 排序(Sor ...

  8. 【数据结构与算法】这或许是东半球分析十大排序算法最好的一篇文章

    原地址:https://mp.weixin.qq.com/s?__biz=MzIwNTc4NTEwOQ==&mid=2247486981&idx=1&sn=c63cd080be ...

  9. 这或许是东半球讲十大排序算法最好的一篇文章

    作者 | 不该相遇在秋天 责编 | 程序员小吴 ## 冒泡排序 冒泡排序无疑是最为出名的排序算法之一,从序列的一端开始往另一端冒泡(你可以从左往右冒泡,也可以从右往左冒泡,看心情),依次比较相邻的两个 ...

  10. 十大排序算法 图解 (pythonjava)

    作者 | 不该相遇在秋天 转载自五分钟学算法(ID:CXYxiaowu) 注: 原文使用 java 编程语言,这里我扩展使用 python. 文章目录 No.1 冒泡排序 图解冒泡排序 代码实现 No ...

最新文章

  1. s5 android5.0内存泄漏,android-最初从位图泄漏了未引用的byte [],但被回收的()导致内存泄漏(直到活动停止)...
  2. java 异步请求重定向_JavaEE通过response实现请求重定向
  3. CSS3: 动画循环执行(带延迟)的实现
  4. vue如何让一句代码只执行一次_lt;Vue 源码笔记系列4gt;异步更新队列与$nextTick...
  5. 在GNS3中如何让NETFLOW能够捕获到流量
  6. 找到软件供应链的薄弱链条
  7. python使用itchat获取微信好友列表
  8. Windows 7 下玩游戏不能全屏?
  9. Linux系统下编译连接C源代码
  10. 当想给下一个请求发送同享的数据时候 可以使用域对象设置属性
  11. 比赛-h47学长的训练赛 (27 Aug, 2018)
  12. 【开源项目】CircuitJS1在线电路仿真
  13. 最近 火火火 的开源项目
  14. 当前话题管理故事:厨师绑湖蟹 (转载)
  15. 穆易天气app代码(一)
  16. 属性的遍历:for...in 循环
  17. CSDN,我来了!kbd哈哈哈哈/kbd
  18. (二十六)Fama-French三因素模型及应用
  19. STL - emplace 与 push 的区别
  20. Postgresql12主从配置及切换

热门文章

  1. 【干货】400+页的《面向机器学习的数学》pdf
  2. 【分享】如果我没有那么优秀,我研究生阶段选择机器学习方向还有出路吗?...
  3. 全球计算机一起炼丹是怎样的体验?
  4. 解析6种常用View 的滑动方法
  5. 二十一天学通JavaScript:创建与读取cookie
  6. 二十天一学通C#:.NET中文件和文件夹的类
  7. 大端、小端的前世今生
  8. 贝叶斯分类与贝叶斯网络
  9. knowledge_based topic model - 基于知识的主题模型概述
  10. python - color print