在线工具 在线编程 在线白板 在线工具 在线编程 在线白板

C#编程,排序数字

程序为vs2008
排序:01 02 03 04 05 06 07 08 09 10
输入:50 55 61 68 63 62 57 51 63 63
输入完之后可以下面显示
50:01
51:08
55:02
57:07
61:03
62:06
63:05 09 10
68:04
怎么编程序?编的好多给加分
最新回答
巷陌

2024-09-10 13:52:08

        static void Main(string[] args)
        {
            // 准备字典,存储键和很多很多值
            Dictionary<int, List<string>> dic = new Dictionary<int, List<string>>();
            while (true)
            {
                string str = "01 02 03 04 05 06 07 08 09 10";
                Console.WriteLine("请在对应的序号下输入数字。");
                Console.WriteLine(str);
                string input = Console.ReadLine();
                // 输入的字符串转成数组。array:输入的字符串转成数组。strnum:展示的字符串转换成的数组。
                string[] array = input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                string[] strnum = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                if (array.Length == strnum.Length)
                {
                    int i;
                    for (i = 0; i < strnum.Length; i++)
                    {
                        int temp;
                        // 强转成整数
                        if (int.TryParse(array[i], out temp))
                        {
                            // 将重复的序号加到字典已存在输入数字项中
                            if (dic.ContainsKey(temp))
                            {
                                dic[temp].Add(strnum[i]);
                            }
                            else// 否则就是向字典中添加一项
                            {
                                dic.Add(temp, new List<string>() { strnum[i] });
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                    // 终止判断,是否符合条件,如果符合,跳出死循环,接着后续工作
                    if (i == strnum.Length)
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine("非法的整数。");
                    }
                }
                else
                {
                    Console.WriteLine("长度不符合要求。");
                }
            }
            // 获取输入数字(不含重复项)的数组
            List<int> list = new List<int>();
            foreach (int k in dic.Keys)
            {
                list.Add(k);
            }
            int[] intArray = list.ToArray();
            // 升序算法
            for (int i = 0; i < intArray.Length; i++)
            {
                for (int j = 0; j < intArray.Length-1; j++)
                {
                    int temp;
                    if (intArray[j] > intArray[j + 1])
                    {
                        temp = intArray[j];
                        intArray[j] = intArray[j + 1];
                        intArray[j + 1] = temp;
                    }
                }
            }
            // 读取输入数字的数组,并从字典中找到对应的序号
            for (int i = 0; i < intArray.Length; i++)
            {
                List<string> temp = new List<string>();
                foreach (KeyValuePair<int,List<string>> k in dic)
                {
                    if (intArray[i] == k.Key)
                    {
                        temp.AddRange(k.Value.ToArray());
                    }
                }
                // 数组的输出只能靠循环来做
                StringBuilder sb = new StringBuilder();
                for (int z = 0; z < temp.ToArray().Length; z++)
                {
                    int t = Convert.ToInt32(temp.ToArray()[z]);
                    sb.Append((t > 9 ? t.ToString() : "0" + t) + " ");
                }
                Console.WriteLine("{0}:{1}", intArray[i], sb.ToString());
            }
            Console.ReadKey();
        }

二病晚期

2024-09-10 06:13:05

冒泡算法呀

public static void Sort(int[] array)
{
int[] arr=new int[]{45,12,44,4,5};
for(int j=1;j<arr.Length;j++)
{//外循环每次把参与排序的最大数排在最后
for(int i=0;i<arr.Length-j;i++)
{ //内层循环负责对比相邻的两个数,并把最大的排在后面
if(arr[i]>arr[i+1])
{ //如果前 一个数大于后一个数,则交换两个数
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}

}
}
//用 一个循环访问数组里的元素并打印
for(int j=0;j<arr.Length;j++)
{
Console.Write(arr[i]+"");
}
}
残●沐伊丶

2024-09-10 17:31:41

你要的是排序索引
追问
能写个具体程序吗?或发给我也行
追答

是这样的结果吗

追问
发来看看,没看明白怎么有两个22:1,把程序给我试试
追答
请先采纳,然后私信
追问
我是初学者,能把编好的传给我吗?方便一个个看怎么编的。
追答
#include<iostream>
using namespace std;

int main() 
{
   int n;
   cin >> n;
   int* a=new int[n];
   int* order=new int[n]; 
   for(int i=0; i<n; i++) 
   {
      cin >> a[i];   
 order[i]=0;
   }
   
   int eqNum=0;
   for(int ord=1; ord+eqNum<=n; ord++) {
      int first=0;
      while(order[first]!=0) first++;
      int min=a[first], minAt=first;
      for(int j=first+1; j<n; j++) {
         if(order[j]!=0) continue;
         if(a[j]<min) { min=a[j];  minAt=j; }
      }
      int ord0=ord;
      order[minAt]=ord0;
      for(int k=minAt+1; k<n; k++) {
         if(a[k]==min) { order[k]=ord0;  eqNum++;  }
      }
   }
   
   for(int i=0; i<n; i++) {
      if(i>=0) cout << "\n";
      cout << a[i]<< " : " << order[i];
   }
}