-->

Insertion Sorting c#

2019-03-07 03:33发布

问题:

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; }