Insertion Sorting c#

☆樱花仙子☆ 提交于 2019-12-02 23:23:06

问题


Can you guys please help me with basic insertion sorting in C#. I have a list of names and city of residence in a array and need to sort this array by comparing the city of residence. List has to be sorted in alphabetical order. Comparator has been set up and works I'm just kinda lost with the insertion sorter programming as this is the first time we are doing that method of sorting.

Here's what I've tried so far:

public void InsertionSort()
{
    for (int i = 0; i < Count; i++)
    {
        Student cur = Attendees[i];
        for (int j = 0; j < Count; j++)
        {
            Student Sel = Attendees[j];
            if (cur.CompareTo(Sel) < 0)
            {
                Student temp = Attendees[j];
                Attendees[j] = Attendees[i];
                for (int k = i; k > j; k--)
                    Attendees[k] = Attendees[k - 1];
                Attendees[k + 1] = temp;
            }
        }
    }
}

回答1:


Try like this...

public void InsertionSort()
{
    for (int i = 0; i < Count; i++)
    {
        int j = i;
        While(j > 0)
        {
            Student cur = Attendees[j];
            Student sel = Attendees[j-1];
            if (cur.CompareTo(Sel) < 0)
            {
                Student temp = cur;
                cur = sel;
                sel = temp;
                j--
            }
            else
                break;
        }
    }
}



回答2:


public void InsertionSort()
{
    for (int i = 1; i < Count; i++) // Iterate beginning at 1, because we assume that 0 is already sorted
    {
        for (int j = i; j > 0; j--) // Iterate backwards, starting from 'i'
        {
            Student cur = Attendees[j - 1];
            Student tbs = Attendees[j]; // 'tbs' == "to be sorted"
            if (cur.CompareTo(tbs) < 0) // usually, classes that implement 'CompareTo()' also implement 'operator <()', 'operator >()' and 'operator ==()', so you could have just written 'cur < tbs'
            {
                Student temp = Attendees[j];
                Attendees[j] = Attendees[j - 1];
                Attendees[j - 1] = temp;
            }
            else
                break; // since 'tbs' is no longer > 'cur', it is part of our sorted list. We don't need to sort that particular 'tbs' any further
        }
    }
}

Keep in mind, that this algorithm sorts your list in descending order.




回答3:


int[] newarr = {2,1,5,3,7,6}; int a, b; for (int i = 1; i < newarr.Length; i++) { a = newarr[i]; b = i - 1; while(b>=0 && newarr[b]>a) { newarr[b+1] = newarr[b]; b=b-1; } newarr[b+1] = a; }



来源:https://stackoverflow.com/questions/14725750/insertion-sorting-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!