算法导论(3)插入排序

#pragma once
/*
插入排序算法,相当于抓牌时,手里的牌都是已经排序好的,新抓起的牌从右向左依次和手里的牌进行比较
每比较依次都要后移一位多出一个空位,以便新牌插入到正确的位置
*/
template<class T>
void InsertSort(T *src, int length)
{
	for (int j = 1; j < length;j++) {
		T key = src[j];   //待插入的牌

		//将src[j]插入到src[j-1]-src[0]
		int i = j - 1;
		while (i >= 0 && key < src[i]) {   //待插入的牌小于手中标号为i的牌
			src[i + 1] = src[i];           //说明这张牌还要继续向前插入,于是前面挪出一个位置
			i--;                           //继续和前面一张进行比较
		}
		//退出循环的条件是i减小到-1,或者是key大于src[i]
		src[i + 1] = key;
	}
}
时间: 2024-11-05 14:49:48

算法导论(3)插入排序的相关文章

算法导论之插入排序和归并排序

一.创建我们的测试工程 因为我们只理解相应算法,没有什么用户图形,也就用不到UI了,在这儿使用Xcode创建一个基于Mac开发的控制台工程即可,整个工程很简单,一个main函数一个排序类,如下所示. 在Sort类中我们写了关于排序的一些类方法,然后在main函数中进行调用. 二.插入排序 插入排序顾名思义,就是把无序的元素插入到有序的元素当中.<算法导论>中举了一个特为形象的例子,插入排序就如同你在打扑克时摸牌一样,手里的牌是有序的,而你刚摸得牌是是随机的,需要你插入到已经排好序的扑克牌中,这

【算法导论】插入排序

排序问题 输入:n个数的一个序列<a1, a2, ..., an> 输出:输入序列的一个排列<b1, b2, ..., bn>,满足 b1 ≤ b2 ≤ ... ≤ bn. 插入排序 对于插入排序,我们将其伪代码命名为Insertion-sort,其中的参数是一个数组A[1..n],包含长度为n的要排序的一个序列.(在代码中,A中元素的数目n用A.length来表示.)该算法原址排序输入的数:算法在数组A中重排这些数,在任何时候,最多只有其中的常数个数字存储在数组外面.在过程Ins

算法导论-排序-插入排序、归并排序

目录: 1.插入排序算法伪码 2.插入排序c++实现 3.归并排序算法伪码 4.归并排序c++实现 5.总测试程序 内容: 1.插入排序算法伪码 Insertion_sort(A[],n) //数组下标从1开始 for j <- 2 to n do key <- A[j] i <- j-1 while i>0 and A[i]>key A[i+1] <- A[i] i <- i-1 A[i+1]=key 2.插入排序c++实现 1 template<type

算法导论之——插入排序

#include<stdio.h> /*我们希望排序的数也称为关键字*/ void sort_on(void); void sort_down(void); int A[6] = { 5,2,4,6,1,3 }; int main(void) { //sort_down(); sort_on(); for (int num = 0; num<6; num++) printf("%d ", A[num]); return 0; } //升序 void sort_on(v

《算法导论》插入排序

2017-08-17 11:40:36 writer:pprp 最简单的插入排序,用代码实现思想 1 #include <iostream> 2 #include <string> 3 #include <fstream> 4 #include <cstring> 5 6 using namespace std; 7 const int maxn = 9999; 8 int a[maxn]; 9 int N; 10 11 void init() 12 { 1

算法导论学习之插入排序+合并排序

最近准备花时间把算法导论详细的看一遍,强化一下算法和数据结构的基础,将一些总结性的东西写到博客上去. 一.插入排序 算法思想:如果一个数组A,从A[1–n-1]都是有序的,然后我们将A[n]插入到A[1–n-1]的某个合适的位置上去那么就可以保证A[1–n]都是有序的.这就是插入排序的思想:具体实现的时候我们将数组的第一个元素看出有序,然后从第二个元素开始按照上面的步骤进行插入操作,直到插入最后一个元素,然后整个数组都是有序的了. 时间复杂度分析:代码中有两重for循环,很容易看出时间复杂度是n

算法导论—排序之插入排序

void insertion_sort(vector<int> &num){ for(int i = 1; i < num.size(); i++){ int j = i-1; int val = num[i]; while(j>=0 && num[j] >= val){ num[j+1] = num[j]; j--; } num[j+1] = val; } } 每次迭代时,将num[i] 作为key值,且前子数组[0,i-1] 构成已排好序,每次与左

插入排序——算法导论

最近在看MIT的算法导论,在网易公开课上有这门课的视频,正好讲义也在图书馆借到了,有在看的小伙伴可以一起加油. 绪论中以插入排序为例,讲述了算法中非常重要的两个概念时间复杂度T(n)和空间复杂度.详细地对程序花费时间T. 伪代码: INSERTION-SORT(A) 1 for j←2 to length[A] 2 do key←A[j] 3 Insert A[j] into the sorted 4 sequence A[1..j-1]. 5 i←j-1 6 while i>0 and A[i

算法导论学习 之 插入排序

刚刚开始系统学习算法导论和c++,每次学习的算法都用c++ 实现一边,加深理解,方便回顾. 先从最简单的插入排序开始吧: code: #include<iostream> #include<vector> #include<map> using namespace std; void Insertion_Sort(int * a,int length) { int i,j,key; for(i = 1;i < length;i ++){ key = a[i]; j

算法导论(Introduction to Algorithms )— 第二章 算法入门 — 2.1 插入排序

一.插入排序:INSERTION-SORT 1.适用范围: which is an efficient algorithm for sorting a small number of elements. 对于少量元素的排序,插入排序是一种高效的算法. 2.原理: Insertion sort works the way many people sort a hand of playing cards. We start with an empty left hand and the cards