插入排序

原创 2013年12月03日 21:35:42
    排序毫无疑问是算法中最基本的问题,插入排序更是其中常用的一种类型。
    插入排序的思路非常容易理解,就像打扑克牌时一张一张摸牌,然后把牌从小到大排列在手里。手里的牌总是排好序的,每摸一张牌,就从大到小去比较,直到找到合适的位置把摸到的牌放进去。用代码实现如下:

#include <stdio.h>
#include <stdlib.h>
 
#define SIZE_ARRAY_1 5
#define SIZE_ARRAY_2 6
#define SIZE_ARRAY_3 20

void insertion_sort(int a[], int n);
void showArray(int a[], int n);

void main()
{
	int array1[SIZE_ARRAY_1]={1,4,2,-9,0};
	int array2[SIZE_ARRAY_2]={10,5,2,1,9,2};
	int array3[SIZE_ARRAY_3];
	
	for(int i=0; i<SIZE_ARRAY_3; i++)
	{
		array3[i] = (int)((40.0*rand())/(RAND_MAX+1.0)-20);
	}
	
	printf("Before sort, ");
	showArray(array1, SIZE_ARRAY_1);
	insertion_sort(array1, SIZE_ARRAY_1);
	printf("After sort, ");
	showArray(array1, SIZE_ARRAY_1);
	
	printf("Before sort, ");
	showArray(array2, SIZE_ARRAY_2);
	insertion_sort(array2, SIZE_ARRAY_2);
	printf("After sort, ");
	showArray(array2, SIZE_ARRAY_2);
	
	printf("Before sort, ");
	showArray(array3, SIZE_ARRAY_3);
	insertion_sort(array3, SIZE_ARRAY_3);
	printf("After sort, ");
	showArray(array3, SIZE_ARRAY_3);
}

void showArray(int a[], int n)
{
	if(n>0)
		printf("This array has %d items: ", n);
	else
		printf("Error: array size should bigger than zero.\n");
	
	for(int i=0; i<n; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
}

/* insertion_sort
 * Principle: Divide array into two parts: sorted part and unsorted 
 * part, insert the first item of unsorted part into sorted part. 
 */
void insertion_sort(int a[], int n)
{
	if(n<=0)
		return;

	for(int j=1;j<n;j++) {
		int key = a[j];
		// insert a[j] into sorted parts
		int i = j-1;
		while( i>=0 && a[i]>key ) {
			a[i+1] = a[i];
			i--;
		}
		a[i+1] = key;
	}
}


C++实现插入排序

  • 2017年11月02日 22:26
  • 712B
  • 下载

冒泡/选择/插入排序区别

在上篇转载的博客,通过那些图,相信已经让你对于这三种算法有了一定的了解,下面首先来回顾下各种排序的主要思路: 冒泡排序:     每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面,逐次比...

插入排序(C语言实现)

  • 2014年11月30日 16:12
  • 926B
  • 下载

白话经典算法系列之二 直接插入排序的三种实现

http://blog.csdn.net/morewindows/article/details/6665714 直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按...

插入排序的方法

  • 2013年07月10日 12:12
  • 31KB
  • 下载

直接插入排序的C实现

  • 2013年05月16日 11:20
  • 495B
  • 下载

算法导论读书笔记(插入排序)

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序取出下一个元素,在已经排序的元素序列中从后向前扫描如果该元素(已排序)大于新元素,将该...

插入排序源代码

  • 2013年07月31日 08:39
  • 585B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:插入排序
举报原因:
原因补充:

(最多只允许输入30个字)