大数跨境
0
0

直接插入排序

直接插入排序 Social Companion
2018-09-27
0
导读:直接插入排序基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。p

直接插入排序基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。


public static void insertionSort(int[] arr) 

{

        for (int i = 1; i < arr.length; i++) 

        {

            int j = i;

            while (j > 0 && arr[j] < arr[j - 1])

             {

                swap(arr,j,j-1);

                j--;

                }

        }

    }

void InsertSort(int arr[],int n)

{

    for (int i =1;i <= n;++i)

    {

        for(int j = i;j > 0;--j)

        {

            if(arr[j] < arr[j -1])

                {

                int temp = arr[j];

                arr[j] = arr[j - 1];

                arr[j - 1] = temp;

            }

        }

    }

}

原理都是一样的,第一个for循环对从第二个开始的所有的数字遍历,嵌套的for循环是每次遍历数字时都取无序区的一个元素与有序区的元素比较,如果比有序区的要小则交换,直到合适的位置。

如果使用vector的话会方便一点,因为vector可以使用size()直接获得容器内的元素个数


void InsertSort2(vector<int> &num)

{

    for(int i = 1;i < num.size();++i)

    {

        for(int j = i;j > 0;--j)

        {

            if(num[j] < num[j - 1])

            {

                int temp = num[j];

                num[j] = num[j-1];

                num[j-1] = temp;

            }

        }

    }

}

插入排序的时间复杂度最好的情况是已经是正序的序列,只需比较(n-1)次,时间复杂度为O(n),最坏的情况是倒序的序列,要比较n(n-1)/2次,时间复杂度为O(n^2 ) ,平均的话要比较时间复杂度为O(n^2 )

插入排序是一种稳定的排序方法,排序元素比较少的时候很好,大量元素便会效率低下



【声明】内容源于网络
0
0
Social Companion
信息科技教学,个人思考随感的在线记事本
内容 791
粉丝 0
Social Companion 信息科技教学,个人思考随感的在线记事本
总阅读12
粉丝0
内容791