让算法会说话之插入排序

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/26059615

插入排序:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

一.插入排序算法

/***************************************************************
*版权所有 (C)2014,公司名称。
*
*文件名称:插入排序法
*内容摘要:无
*其它说明:无
*当前版本:V1.0
*作   者:若云流风
*完成日期:2014.5.17
***************************************************************/
#include <stdio.h>

#define N  7

void disp(void);

int a[N]={5,0,7,1,12,11,9};

/*排序函数*/
void InsertionSort(void)
{
	int j,p,temp;

	for(p=1;p<N;p++)
	{
		temp=a[p]; //a[p]和左面的有序数列去比较
/*j>0保证不溢出,因为当j=0时啊a[j-1]非法,用a[p]分别与左面的值相比较
**如果a[p]小的话则互换位置,
*/
		printf("\n\n排序过程:        ");
		for(j=p; j>0 && a[j-1]>temp;j--)
		{
			a[j]=a[j-1];
            disp();
        }
		a[j]=temp;

		printf("\n\n新一轮排序结果:        ");
		disp();
	}

} 

/*输出函数*/
void disp(void)
{
     int i;

//     printf("\n排序结果: \n");
	 printf("\n\n");
	 for(i=0;i<N;i++)
	 {
		printf("%d", a[i]);
		printf("  ");
	 }

}

int main(void)
{
	InsertionSort();
  //  disp();
	return 0;

}

二.算法会说话

1.结果输出

2.结果分析

上图就是每一轮的排序过程和结果。对于7个数的数组,共需要6轮。现在我拿出第三轮来详细讲解这个插入排序。

程序在第二轮已经将前三个数排好了,第三轮将a[3](也就是第四个数)与前面的数相比较。1与7比较,确实比7小所以a[3]被赋值为7,然后1继续向左走,1比5小,a[2]被赋值为5,然后1继续向左走,1比0大,循环终结。将a[1]赋值为1(也就是temp)。

让算法会说话之插入排序

时间: 2024-11-08 23:39:16

让算法会说话之插入排序的相关文章

让算法会说话之快速排序

        转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/30729523        快速排序是由东尼.霍尔所发展的一种排序算法.在平均状况下,排序n 个项目要O(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 一.排序步骤总结: 快速排序使

算法整理(三):插入排序

插入排序很简单,就像打扑克.手里有个牌4,再来一张牌5就本能的放到第一个牌的右边.如果来了个3就从右往左扫描,只要左边的比这个待插入数字大就交换. 插入排序是一种稳定的排序方法,时间复杂度O(n*n),空间复杂度O(1),最好的情况下时间复杂度为O(1).即本来就是一个有序或者相等的数组,则只需比较n-1次即可.下为源码,只需三行代码即可. //============================================================================

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

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] 构成已排好序,每次与左

排序算法《3》插入排序

算法实现: 使用插入排序将下面的数字按照从小到大的顺序排列 2 9 5 4 8 1 6 步骤1:数组中已经排好的是{1},将9插入数组中 步骤2:数组中已经排好的是{2,9},将5插入数组中 步骤3:数组中已经排好的是{2,5,9},将4插入数组中 步骤4:数组中已经排好的是{2,4,,5,9},将8插入数组中 步骤5:数组中已经排好的是{2,4,,5,8,9},将1插入数组中 步骤6:数组中已经排好的是{1,2,4,,5,8,9},将6插入数组中 步骤7:排序完成 1 2 4 5 6 8 9

让算法会说话之归并排序

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/27570953 归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作.归并排序算法依赖归并操作. 一.归并排序算法 /*************************************************************** *版权所有 (C)2014,公司名称. * *文件名称:归并排序法 *内容摘要:无 *其它说明:无 *

让算法会说话之冒泡排序

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/25972987 冒泡排序:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 一.冒泡排序算法以及优化 1.常用代码 /**************************************

算法导论(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

[算法学习笔记]直接插入排序笔记

直接插入排序概念: 带排元素放在elem[0...n-1]中,初始化时,elem[0]自成1个有序区,无序区为elem[1...n-1],从i=1起,到i=n-1,依次将elem[i]插入有序区[0...n-1]中 直接插入排序算法步骤: 1.在当前有序区域R[1,i-1]中查找R[i]的正确插入位置K(1<=K<=i-1) 2.将R[K,i-1]中的记录均向后移动 3.移动后腾出K位置,插入R[i] (最坏)时间复杂度:O(n^2) 空间复杂度:O(1) /// <summary>

让算法会说话之希尔排序

这是我参照之前在iOS项目中用过的一个不规则形状按钮的第三方Button,这里用Cocos2d-x实现一个相似功能的按钮. 原文地址:http://blog.csdn.net/qqmcy/article/details/26161339 代码下载:http://download.csdn.net/detail/qqmcy/7365843 使用方法: .h // // TestScene.h // maptest // // Created by 杜甲 on 14-5-18. // // #ifn