不使用任何方法/函数对字符串值进行排序

时间:2014-05-20 11:26:36

标签: c# .net

我试图在不使用任何方法或功能的情况下进行排序

我的代码:

   string[] names = { "Flag", "Nest", "Cup", "Burg", "Yatch", "Next" };                     
   string name = string.Empty;
   Console.WriteLine("Sorted Strings : ");

   for (int i = 0; i < names.Length; i++)
        {
            for (int j = i + 1; j < names.Length; j++)
            {
                for (int c = 0; c < names.Length; c++)
                {
                    if (names[i][c] > names[j][c])
                    {
                        name = names[i];
                        names[i] = names[j];
                        names[j] = name;
                    }
                }

            }
            Console.WriteLine(names[i]);
        }

请让我为此代码提供任何解决方案?

在这段代码中我得到“索引超出了数组的范围”异常

9 个答案:

答案 0 :(得分:3)

您需要实施排序算法。

您可以实现的一个非常简单的算法是insertion sort

string[] names = { "Flag", "Nest", "Cup", "Burg", "Yatch", "Next" };

for (int i = 0; i < names.Length; i++)
{
    var x = names[i];
    var j = i;
    while(j > 0 && names[j-1].CompareTo(x) > 0)
    {
        names[j] = names[j-1];
        j = j-1;
    }
    names[j] = x;
}

答案 1 :(得分:3)

        int temp = 0;
        int[] arr = new int[] { 20, 65, 98, 71, 64, 11, 2, 80, 5, 6, 100, 50, 13, 9, 80, 454 };
        for (int i = 0; i < arr.Length; i++)
        {
            for (int j = i + 1; j < arr.Length; j++)
            {
                if (arr[i] > arr[j])
                {
                    temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
            }
            Console.WriteLine(arr[i]);
        }
        Console.ReadKey();

答案 2 :(得分:2)

string[] names = { "Flag", "Next", "Cup", "Burg", "Yatch", "Nest" };
        string name = string.Empty;
        Console.WriteLine("Sorted Strings : ");

        for (int i = 0; i < names.Length; i++)
        {
            int c = 0;
            for (int j = 1; j < names.Length; j++)
            {
                if (j > i)
                {
                 Sort:
                    if (names[i][c] != names[j][c])
                    {
                        if (names[i][c] > names[j][c])
                        {
                            name = names[i];
                            names[i] = names[j];
                            names[j] = name;
                        }
                    }
                    else
                    {
                        c = c + 1;
                        goto Sort;
                    }                        
                }
            }
            Console.WriteLine(names[i]);
        }

答案 3 :(得分:1)

我在名字数组的长度和比较字符串方面存在冲突。以下是工作解决方案。我已经测试过它现在正在使用

static void Main(string[] args)
        {
            int min=0;

            string[] names = { "Flag", "Nest", "Cup", "Burg", "Yatch", "Next" };
            string name = string.Empty;
            Console.WriteLine("Sorted Strings : ");

            for (int i = 0; i < names.Length-1; i++)
            {
                for (int j = i + 1; j < names.Length;j++ )
                {

                    if(names[i].Length < names[j].Length)
                           min =names[i].Length;
                    else
                            min =names[j].Length;
                    for(int k=0; k<min;k++)
                    {
                        if (names[i][k] > names[j][k])
                        {
                            name = names[i].ToString();
                            names[i] = names[j];
                            names[j] = name;
                            break;
                        }
                        else if(names[i][k] == names[j][k])
                        {
                            continue;
                        }
                        else
                        {
                            break;
                        }

                    }
                }


            }
            for(int i= 0;i<names.Length;i++)
            {
                Console.WriteLine(names[i]);
                Console.ReadLine();
            }
        }
    }

答案 4 :(得分:0)

class Program
{
    static void Main(string[] args)
    {
        int[] arr = new int[] {9,1,6,3,7,2,4};
        int temp = 0;

        for (int i = 0; i < arr.Length; i++)
        {
            for (int j = i + 1; j < arr.Length;j++)
            {
                if(arr[i]>arr[j])
                {
                    temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
            }

            Console.Write(arr[i]+",");
        }
             Console.ReadLine();
    }

答案 5 :(得分:0)

import tkinter
import TkDND3

from tkinter.scrolledtext import ScrolledText

root = tkinter.Tk()

entry = tkinter.Entry(root)
entry.pack(fill='both', expand=True)

text = tkinter.Text(root)
text.pack(fill='both', expand=True)

entry.bindtarget()
text.bindtarget()

stext = ScrolledText(root)
stext.pack(fill='both', expand=True)
stext.bindtarget()
root.mainloop()

答案 6 :(得分:0)

public int compareing(string a, string b)
        {


            char[] one = a.ToLower().ToCharArray();
            char[] two = b.ToLower().ToCharArray();

            int ret = 0;
            for (int i = 0; i < one.Length; i++)
            {

                for (int j = 0; j < two.Length; j++)
                {
                    Loop:
                    int val = 0;
                    int val2 = 0;

                    string c = one[i].ToString();
                    char[] c1 = c.ToCharArray();
                    byte[] b1 = ASCIIEncoding.ASCII.GetBytes(c1);

                    string A = two[j].ToString();
                    char[] a1 = A.ToCharArray();
                    byte[] d1 = ASCIIEncoding.ASCII.GetBytes(a1);


                    int sec = d1[0];
                    int fir = b1[0];


                    if (fir > sec)
                    {
                        return ret = 1;
                        break;
                    }
                    else
                    {
                        if (fir == sec)
                        {
                            j = j + 1;
                            i = i + 1;
                            if (one.Length == i)
                            {
                                return ret = 0;
                            }
                            goto Loop;
                        }
                        else
                        {
                            return 0;
                        }

                    }




                }


            }

            return ret;
        }
        public void stringcomparision(List<string> li)
        {
            string temp = "";
            for(int i=0;i<li.Count;i++)
            {
                for(int j=i+1;j<li.Count;j++)
                {

                    if(compareing(li[i],li[j])>0)
                    {
                        //if grater than it throw 1 else -1
                        temp = li[j];
                        li[j] = li[i];
                        li[i] = temp;
                    }
                }
            }


            Console.WriteLine(li);
        }

答案 7 :(得分:0)

for (int i = 0; i < names.Length - 1; i++)
        {
            string temp = string.Empty;
            for (int j = i + 1; j < names.Length; j++)
            {
                if (names[i][0] > names[j][0])
                {
                    temp = names[i].ToString();
                    names[i] = names[j].ToString();
                    names[j] = temp;
                }
            }
        }
        for (int i = 0; i < names.Length - 1; i++)
        {
            int l = 0;
            if (names[i][0] == names[i + 1][0])
            {
                string temp = string.Empty;
                if (names[i].Length > names[i + 1].Length)
                    l = names[i + 1].Length;
                else
                    l = names[i].Length;
                for (int j = 0; j < l; j++)
                {
                    if (names[i][j] != names[i + 1][j])
                    {
                        if (names[i][j] > names[i + 1][j])
                        {
                            temp = names[i].ToString();
                            names[i] = names[i + 1].ToString();
                            names[i + 1] = temp;
                        }
                        break;
                    }
                }

            }
        }
        foreach (var item in names)
        {
            Console.WriteLine(item.ToString());
        }

答案 8 :(得分:0)

            string[] names = { "Flag", "Nest", "Cup", "Burg", "Yatch", "Next" };
            string temp = "";
            int tempX = 0, tempY = 0;
            int tempX1 = 0, tempY1 = 0;
            for (int i = 0; i<names.Length; i++)
            {
                for (int j = i+1; j<names.Length; j++)
                {

                    if (((string)names[i])[0] > ((string)names[j])[0])
                    {
                        temp=(string)names[i];
                        names[i]=names[j];
                        names[j]=temp;
                    }
                    else if (((string)names[i])[0] == ((string)names[j])[0])
                    {
                        tempX=0; tempY=0;
                        tempX1=names[i].Length;
                        tempY1=names[j].Length;
                        while (tempX1 > 0 && tempY1 >0)
                        {
                            if (((string)names[i])[tempX] !=((string)names[j])[tempY])
                            {
                                if (((string)names[i])[tempX]>((string)names[j])[tempY])
                                {
                                    temp=(string)names[i];
                                    names[i]=names[j];
                                    names[j]=temp;

                                    break;
                                }
                            }
                            tempX++;
                            tempY++;
                            tempX1--;
                            tempY1--;
                        }

                    }
                }
            }
相关问题