时间复杂度为O(N*N)的排序算法——插入排序

 void insertSort(vector<int>& nums,int start,int end){
        int key;
        for(int j =1;j<nums.size();j++){
            key = nums[j];
            int i;
            for(i = j-1;i>=0&&nums[i]>key;i--){
//由于上次循环结束j之前的数组保持有序,那么一旦找到num[i]<=key的情//况,i就不需要再遍历了
                nums[i+1] = nums[i];
            }
            nums[i+1] = key;
        }
        for(int i = 0;i<nums.size();i++){
            cout<<nums[i];
        }
    }
时间: 2024-10-20 15:39:48

时间复杂度为O(N*N)的排序算法——插入排序的相关文章

经典排序算法 – 插入排序Insertion sort

经典排序算法 – 插入排序Insertion sort  插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行.   图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入. 以下代码仅供参考,欢迎指正 /// <summary> /// 插入排序 /// </summary> /// <param na

PHP之八大排序算法--插入排序(-)直接插入排序

直接插入排序: 插入排序是最简单的排序算法之一,对于有N个元素的序列,插入排序由N-1趟排序组成.它的工作原理是通过构建有序序列,对于未排序的数据,在已经排序序列中从后向前扫描,找到相应位置插入. 插入排序算法步骤: 将第一个待排序的序列的第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列. 从头到尾一次扫描未排序的序列,将扫描到的每个元素插入有序序列的适当位置(在这里需要注意一个问题,如果在有序序列中有一个和待插入的元素相等,则将待插入的元素查到此元素的后面,这样方式的插入

排序算法 插入排序(直接插入排序、半插入排序、希尔排序)

一.直接插入排序. 1.介绍. 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列.例如,已知待排序的一组记录是:60,71,49,11,24,3,66.假设在排序过程中,前3个记录已按关键码值递增的次序重新排列,构成一个有序序列:49,60,71.将待排序记录中的第4个记录(即11)插入上述有序序列,以得到一个新的含4个记录的有序序列.首先,应找到11的插入位置,再进行插入.可以

数据结构和算法-排序算法-插入排序

##################    插入排序        #################### """ 插入算法: alist = [54,26,93,17,77,31,44,55,20] 还是把序列分为两部分, 一开始就把第一个数字认为是有序的, alist = [54, 26,93,17,77,31,44,55,20] 第一轮, 把第二部分的和第一部分的最后一个做比较,如果小就交换, alist = [26,54 93,17,77,31,44,55,20]

时间复杂度为O(N*logN)的排序算法——归并排序、快速排序、堆排序

1.归并排序 1 void mergeSort(vector<int>& nums,int start,int end){ 2 if(start<end){ 3 int q = (start+end)/2; 4 mergeSort(nums,start,q); 5 mergeSort(nums,q+1,end); 6 merge(nums,start,q,end); 7 } 8 } 9 void merge(vector<int>& nums,int star

单向链表排序时间复杂度比较低的一种排序算法

归并排序:   来自网上一篇博文,先贴上链接,后期将会上传个人见解: http://blog.sina.com.cn/s/blog_78a4bd490101fow8.html

排序算法:插入排序,折中插入排序

1??插入排序:把序列分为有序和无序两部分排序,如果是升序,则无序和有序比较小则有序右移直到找到大于有序值然后替换,大于则不变,有序++:继续比较: 主要用途:直接插入算法实现简单,在序列基本有序的情况下,移动和比较的次数少,所以有序情况下优先插入排序 复杂度与稳定度:属于稳定的排序方法,时间复杂度 O(n^2) 空间复杂度 O(1); C/C++: 1 #include <iostream> 2 3 int *InsertSort(int *Array, int size) 4 { 5 if

排序算法-插入排序(javascript)

思想:每一趟将一个记录插入到已经排好序的一组记录的适当位置上,知道所有待排序记录都插入为止. function insertSort(arr){ for(var i=2;i<=arr.length;i++){ if(arr[i]<arr[i-1]){ //小于时插入 arr[0]=arr[i]; //将待插入的记录暂存到监视哨 arr[i]=arr[i-1]; //arr[i-1]后移 for(var j=i-2;arr[0]<arr[j];--j){ //从后往前寻找插入位置 arr[

经典排序算法——插入排序

对于一个int数组,请编写一个插入排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: 输入数组:[1,2,3,5,2,3],6 输出数组:[1,2,2,3,3,5] class InsertionSort { public: int* insertionSort(int* A, int n) { // write code here for(int i=1;i<n;++i) { int insertNum=A[i];//待插入元素 int j=i;