排序(2)---------简单插入排序(C语言实现)

插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

通俗解释:

①假设初始序列的第一个元素是有序的(当一个序列只有1个元素时,我们可以认为其是有序的)。

②从第二个元素开始与前面的元素进行比较,如果比前面的大就不动位置,如果比其小就换位置

③再从第三个位置继续往前比较,反复操作,直到整个序列有序为止。

源代码:

#include "stdafx.h"
#include <stdlib.h>

void Insert_Sort()
{
	int arr[10];

	for ( int i=0; i<10; i++)  //初始化数据
	{
		arr[i] = rand()%33;  //随机生成数据
	}
	printf("Before sort:\n");  //打印排序前的数据
	for (int i = 0; i < 10; i++)
	{
		printf("%d ",arr[i]);
	}

	//开始排序
	int k = 0;
	int temp = 0 ; //记录要插入的数据
	for (int i = 1; i < 10; i++) //从第二个一直比到最后一个元素
	{
		k = i;
		temp = arr[k];
		for (int j = i-1; (j>=0)&&(arr[j] > temp); j--)//从要插入的元素的上一个元素开始,一直往前,																			//直到要插入的元素遇到不比它大的元素为止
		{
			arr[j+1] = arr[j];
			k = j; //k的位置就是要插入的位置
		}
		arr[k]  = temp; //将要插入的元素插到k的位置
	}

	printf("\nAfter sort:\n"); //打印排序后的数据
	for (int i = 0; i < 10; i++)
	{
		printf("%d ",arr[i]);
	}
}
int _tmain(int argc, _TCHAR* argv[])
{
	Insert_Sort();

	printf("\n");
	system("pause");
	return 0;
}

运行结果:

Before sort:
8 20 31 1 29 16 27 21 1 11
After sort:
1 1 8 11 16 20 21 27 29 31
请按任意键继续. . .

如有错误,望不吝指出。

排序(2)---------简单插入排序(C语言实现),布布扣,bubuko.com

时间: 2024-10-07 11:07:09

排序(2)---------简单插入排序(C语言实现)的相关文章

选择排序 冒泡排序 简单插入排序

排序: public class SortDemo { public static void main(String[] args) { int[] arr = { 5, 8, 9, 12, 55, 565, 421, 12, 2512, -5, -56 }; // int[] arr = { 6, 9, 4589, 442, 458, 5232, -788, 7, 545, -44, 55, -11 // }; // selectionSort(arr); // bubbleSort(arr)

简单插入排序和希尔排序(原理和C语言实现)

简单插入排序的原理很简单: 所谓插入排序,就是将新加入的数据插入到一个有序数组中,并且保证插入后有序.这就要求要找到插入的位置. (图片来自维基百科) 对于一个已经存在的数组(乱序),要将其有序排列(这里取从小到大),就可以按照下面的步骤: 1.先假定一个有序数组,这个数组只有一个元素,就是第一个元素,它一定是有序的; 2.我们从第二个数(下标为1)开始向后遍历数组; for(insert_index=1; insert_index < arr_len; insert_index++){ } 3

C语言-简单选择排序与直接插入排序的实现

/* Name: selectSort and insertSort Copyright: nyist Author: 润青 Date: 01/10/18 19:30 Description: 实现了简单选择排序与直接插入排序 */ #include<stdio.h> int a[100]; int n; void selectSort(); void insertSort(); int main(){ scanf("%d",&n); for(int i=0;i&l

排序(二)__冒泡排序、简单选择排序和直接插入排序

前面<排序(一)__综述>提到按照算法的复杂度分为简单算法和改进算法两大类,本文主要就简单算法中的冒泡排序.简单选择排序和直接插入排序进行通俗详细的解析. 一.冒泡排序 1.基本概念 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止.(动态图来自维基百科) 2.关键代码(优化之后) void BubbleSort(SqList *L) { int i,j; Status flag=TRUE;            //flag用作标记,避

对c语言系统库函数、堆排序、希尔排序、折半插入排序、快速排序消耗时间的比较

#include <stdio.h> #include <time.h> #define N 100000 /*库比较函数:qsort(int *base,int n,int struct_size,int (*compare)(const void *,const void *))中的比较函数*/ int compare(const void *first, const void *second) { if (*(int *)first > *(int *)second)/

排序算法学习之简单排序(冒泡排序,简单选择排序,直接插入排序)

一.冒泡排序 冒泡排序算是最基础的一种算法了,复杂度为O(N^2),其基本思想是:从最低端数据开始,两两相邻比较,如果反序则交换.代码如下: /*最基本的冒泡排序*/ void BubbleSort1 (int n, int *array) /*little > big*/ { int i, j; for (i=0; i<n-1; i++) { for (j=n-1; j>i; j--) { if (array[j] < array[j-1]) { int temp = array

冒泡排序、简单选择排序、直接插入排序

冒泡排序(Bubble Sort)的基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止.时间复杂度为O(n2). 简单选择排序(Simple Selection Sort)的基本思想:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换.应该说,尽管与冒泡排序同为O(n2), 但简单选择排序的性能上还是要略优于冒泡排序. 直接插入排序(Straight Insertion Sort)的基本思想:将一个记录插入到前面已经排序好的有序表中

若干排序算法简单汇总(一)

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/35819279 作者:小马 从题目看,首先不是全部是若干.排序算法很多,我个人的能力也有限,不可能都讲到.另外,是简单汇总,是希望能用最简单的代码,最简短的语言说明问题,不搞太多理论分析. 就像前面说的,排序算法有很多,而且不存在哪一种最不好,哪一种最好这样的说法.根据用途不同选择最适合的就行了.不过仅从时间复杂度来看,基本上有两种,一种是O(n^2), 一种是O(nlogn).

若干排序算法简单汇总(二)

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/36706131 作者:小马 一希尔排序 上一篇讲到的直接插入排序,时间复杂度O(n^2). 请在脑海里想一下它的过程.如果一个序列本来就是有序的,对它排序的时间复杂度是O(n).所以当序列基本有序时,插入排序排序的效率大大提高,因为减少了移动的动作. 另外,直接插入排序还有一个特点,当n比较小时,它的效率比较高. 希尔排序正是基于上面两个思想做的一种改进算法.它先将整个序列分成若干