有风叶自鸣 2019-05-09 21:37 采纳率: 100%
浏览 440
已采纳

C#,随机数数组排序!求大神看看代码错在哪里?

问题:
由用户确定数组长度后,随机生成一个数组(随机数范围0~20),并对该数组进行排序。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入数组长度!");
            int n = int.Parse(Console.ReadLine());
            Console.WriteLine("------------------");
            int[] a = new int[n];
            var s = new Random();
            for (int i = 0;i < n;i++)
            {
                a[i] = s.Next(1,20);                   //给数组的每个元素赋值一个随机数(范围是0~n-1)
                Console.WriteLine(a[i]);
            }
            Console.WriteLine("排序后的数组如下↓↓");
            int temp = 0;
            for (int i = 0; i < a.Length; i++)
                for (int j = 0; j < a.Length-i-1; j++)
                {
                    if (a[j] > a[j + 1])
                    {
                        temp = a[j];
                        a[j] = a[j + 1];
                        a[j + 1] = temp;
                    }
                    Console.WriteLine(a[j]);
                }
            Console.Read();
        }
    }
}

图片说明
运行以后数组没有被排序,而且莫名多了很多元素,求大神帮忙看看代码错在那里了!谢谢大神。

  • 写回答

2条回答 默认 最新

  • BuXianShan 2019-05-09 23:31
    关注

    你写的是冒泡排序吧。算法没问题,你的Console.WriteLine(a[j])这一行位置不对。请看代码

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    namespace ConsoleApp1 { 
        class Program { 
            static void Main(string[] args) { 
                Console.WriteLine("请输入数组长度!"); 
                int n = int.Parse(Console.ReadLine()); 
                Console.WriteLine("------------------"); 
                int[] a = new int[n]; 
                var s = new Random(); 
                for (int i = 0;i < n;i++) {
                     a[i] = s.Next(1,20); //给数组的每个元素赋值一个随机数(范围是0~n-1) 
                     Console.WriteLine(a[i]); 
                } 
                Console.WriteLine("排序后的数组如下↓↓"); 
                int temp = 0; 
                for (int i = 0; i < a.Length; i++) 
                    for (int j = 0; j < a.Length-i-1; j++) {
                        if (a[j] > a[j + 1]) { 
                            temp = a[j]; 
                            a[j] = a[j + 1]; 
                            a[j + 1] = temp; 
                        }  
                    } 
                for (int i = 0; i < a.Length; i++)//增加了这个for循环用来输出数组
                    Console.WriteLine(a[i]);
            Console.Read(); 
            } 
        } 
    }
    

    下次有问题最好把代码格式做好吧,这样全挤在一起很不方便看哦。
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 虚心请教几个问题,小生先有礼了
  • ¥30 截图中的mathematics程序转换成matlab