什么是插入排序?

时间:2013-02-18 14:07:01

标签: c# sorting insertion-sort

我是编程新手,刚刚听说过排序。我完成了排序的基础知识,发现插入排序是最简单的。但事情是,我不知道它是什么!你能详细解释一下插入排序是什么以及如何实现它。 c#中的实现将更受欢迎。

非常感谢任何帮助! :)

2 个答案:

答案 0 :(得分:1)

Wikipedia

处获取战利品

插入排序的算法是

 int temp, j;

 for (int i=1; i < vector.length; i++){
   temp = vector[i];
   j = i-1;

   while (j >= 0 && vector[j] > temp){
     vector[j + 1] = vector[j];
     j--;
   }

   vector[j+1] = temp;
 }

答案 1 :(得分:0)

插入排序比我们之前实现的算法(冒号排序和选择排序)更有效,可以对小数据集进行排序。当列表部分排序时,主要使用插入排序。我们假设第一个元素已排序。然后我们检查相邻索引的值是更小还是更大。如果值较小,我们将它插入index [0]的左侧,这意味着现在较小的值在index [0],如果它大于index [0]的原始值,那么我们得到一个2的排序列表元素。我们对相邻元素实施相同的方法。然后将其与先前的元素进行比较以创建排序列表。所以基本上 - 你最终会得到数组左侧的排序列表,并在一个阶段右侧未排序。请记住,我们返回并检查数组是否已排序 - 除非相关元素后面的数组(包括相关元素)已完全排序,否则我们不会继续前进。

这是Insertion Sort的C#实现:

class Program
    {
        static void Main(string[] args)
        {
            int i, j;
            int[] unsortedarrayed = new int[] { 34, 36, 2, 7, 8, 3, 6, 5 };

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

            int[] sortedarray = InsertionSorted(unsortedarrayed);

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

            Console.Read();
        }

        public static int[] InsertionSorted(int[] unsortedarrayed)
        {
            for (int i = 1; i < unsortedarrayed.Length; i++)
            {
                int temp = unsortedarrayed[i];
                int j = i - 1;

                while ((j > -1) && (unsortedarrayed[j] > temp))
                {
                    int tempo = unsortedarrayed[j + 1];
                    unsortedarrayed[j + 1] = unsortedarrayed[j];
                    unsortedarrayed[j] = tempo;

                    j = j - 1;
                }
            }

            return unsortedarrayed;
        }
    }

资料来源:   有关详细信息,请单击以下链接:    1)Link 1    2)Link 2