开发者社区> 问答> 正文

数组的排序算法有哪些?如何实现?

数组的排序算法有哪些?如何实现?

展开
收起
知与谁同 2018-07-18 12:35:05 1676 0
1 条回答
写回答
取消 提交回答
  • TA有点害羞,没有介绍自己...
    c#冒泡算法:

    using System;
    using System.Diagnostics;

    namespace 经典算法之冒泡排序
    {
    class Program
    {
    static void Main()
    {
    /* 冒泡排序百度百科:
    * http://baike.baidu.com/view/254413.htm
    * 核心是通过双重循环将数组较小数往前移动,较大数往后移动
    * 还可通过标识符(flag)来判断本趟循环是否进行交换,
    * 若一趟循环中一次交换都不发生,那么说明已经排序完毕,
    * 可以就此结束排序,加快排序的总体时间 */

    /* 使用随机数类生成一个随机数列
    * 特别注意:声明并实例化一个类是需要消耗一定时间的,
    * 尽量不要将类的实例化放在一个循环中生成,
    * 这将导致程序运行非常缓慢 */

    Random rand = new Random(); // 声明并实例化一个随机数类
    int[] intArray = new int[100000]; // 初始化一个数组
    int maxIndex = intArray.Length - 1; // 初始化最大索引变量

    Console.WriteLine("冒泡排序前的数组:");

    // 生成一个随机数列
    for (int i = 0; i <= maxIndex; i++) {
    intArray[i] = rand.Next(1000);
    Console.Write("{0}\t", intArray[i]);
    }

    Console.WriteLine();

    // 开始进行冒泡排序
    Stopwatch stw = new Stopwatch(); // 声明并实例化停止监视类
    stw.Start(); // 开始监视

    bool isExchange = false; // 声明交换标识符,表示本趟排序是否进行交换

    for (int i = 0; i < maxIndex; i++) {
    isExchange = false; // 重置交换标识符状态

    for (int j = maxIndex; j > i; j--) {

    // 比较前后两数大小
    if (intArray[j] > intArray[j - 1]) {
    // 后数大于前数,进行交换
    int temp = intArray[j];
    intArray[j] = intArray[j - 1];
    intArray[j - 1] = temp;
    isExchange = true; // 修改交换标识符为真
    }
    }

    //continue;

    // 根据交换标识符判断本趟是否进行了交换
    if (!isExchange) {
    // 本趟没有进行交换
    break;
    }

    }

    stw.Stop(); // 停止监视

    // 输出排序后的数组
    Console.WriteLine("冒泡排序后的数组:");

    foreach (int element in intArray) {
    Console.Write("{0}\t", element);
    }

    Console.Write("排序消耗时间:" + stw.Elapsed.Milliseconds.ToString());
    Console.ReadKey();
    }
    }
    }
    2019-07-17 22:49:35
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载