zoukankan      html  css  js  c++  java
  • 插入排序

    插入排序原理很简单,讲一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插入组减少。直到待插入组元素个数为0。当然,插入过程中涉及到了元素的移动。

    为了排序方便,我们一般将数据第一个元素视为有序组,其他均为待插入组。

    插入排序算法分析

    插入排序算法有种递归的思想在里面,它由N-1趟排序组成。初始时,只考虑数组下标0处的元素,只有一个元素,显然是有序的。

    然后第一趟 对下标 1 处的元素进行排序,保证数组[0,1]上的元素有序;

      第二趟 对下标 2 处的元素进行排序,保证数组[0,2]上的元素有序;

    .....

    .....

    第N-1趟对下标 N-1 处的元素进行排序,保证数组[0,N-1]上的元素有序,也就是整个数组有序了。

    它的递归思想就体现在:当对位置 i 处的元素进行排序时,[0,i-1]上的元素一定是已经有序的了。

    #include<stdio.h>
    void sort(int *arr,int n)
    {
    	int i,j;
    	int tmp;
    	for(i=0;i<n;i++)
    	{
    		j=i-1;
    		tmp=arr[i];
    		while(j>=0&&arr[j]>tmp)
    		{
    			arr[j+1]=arr[j];
    			j--;
    		}
    		arr[j+1]=tmp;
    	}
    }
    int main()
    {
    	int arr[]={5,13,9,8,12,45,22};
    	sort(arr,sizeof(arr)/sizeof(arr[0]));
    	int i;
    	for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
    	{
    		printf("%d  ",arr[i]);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    关于TCP中对于ACK报文是否需要确认的理解
    定时器
    几个错误
    C++继承与组合
    Ubuntu18的Redis: 4.0安装
    Ubuntu18.04:MySQL: 5.7安装与卸载并配置远程登录(服务器装Mysql5.7一条龙服务)
    Ubuntu18服务器修改字体大小
    Ubuntu修改系统时间
    Ubuntu18.04防火墙安装关闭开启操作等
    Ubuntu阿里云镜像源配置
  • 原文地址:https://www.cnblogs.com/curo0119/p/8586483.html
Copyright © 2011-2022 走看看