数据结构排序之插入排序

一  插入排序分析

     对于这种插入排序呢,我认为这就是另一种排序的思想,逐个拿出每一个元素从该元素的前一个开始比较(从小到大),如果该元 素比它的前元素小,就将前元素的值赋值给该元素,直到不满足条件为止j>=0&&array[j]>min,当循环结束后, 执行 array[j+1]=min;就可以成功的将元素插入,其实这样做的话,数组前面就是有序的,而后面是无序,思想就是这样子了,但是对于时间的复 杂度吗?按照最坏的情况就是倒序时,你在正序排一遍,假如我5个数,5,4,3,2,1

可以很容易的看出来O(n)=1+2+3+4+ · · · · ·+(n-1)这为前n-1项数之和,即就是时间复杂度为O(n^2)

二 代码

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void insertsort(int array[],int n)   // 实现排序的函数
{
    int i,j,min=0;
    for(i=0;i<n;i++)
	{
		min=array[i];
		for(j=i-1;j>=0&&array[j]>min;j--)
			array[j+1]=array[j];
		array[j+1]=min;
	}

}
int main()          // 主函数
{
	int array[100];
	int i=0,n;
	srand ( (unsigned)time (NULL) );
    printf("请你输入要排序的个数: ");
	scanf("%d",&n);
	printf("随机产生%d个数: ",n);
	for(i=0;i<n;i++)
	{
		array[i]=rand()%10+10; //产生10~20之间的数
		printf("%d ",array[i]);
	}
	insertsort(array,n);   // 实现排序的函数
	printf("\n排序之后为:",n);
	for(i=0;i<n;i++)
	{
      printf("%d ",array[i]);
	}
    printf("\n");
	return 0;

三  结果演示

    为了方便起见,我直接用来随机产生数的函数,只要输入你要排序几个数即可,如果想手动输入的话,对上面简单修改就可以了,我也就不废话了

时间: 2024-12-29 11:30:56

数据结构排序之插入排序的相关文章

数据结构——排序——直接插入排序和折半插入排序算法

直接插入排序(Insertion Sort)的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止. 设数组为a[0…n-1]: 1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1].令i=1 2. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间. 3. i++并重复第二步直到i==n-1.排序完成. #include<stdio.h> #include<stdbool.h> vo

数据结构排序-直接插入排序

每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序. 第一趟比较前两个数,然后把第二个数按大小插入到有序表中: 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中: 依次进行n-1趟扫描后就完成了整个排序过程 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int n; 5 6 /* 7 * 直接插入排序 8 */ 9 void InsertSort(int *array) 10 { 11

数据结构 排序(插入排序)

//排序--插入排序法 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> /* 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素, 存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导

数据结构-排序-直接插入排序

直接插入排序 直接插入排序类似对扑克牌的整理,初始情况下把前面第一个看作有序序列,然后后面全是无序. 这个排序写过很多遍,但是每次回顾都感觉到设计者精彩巧妙的安排. #include<iostream> #include<vector> using namespace std; //首先定义测试数组 这里对下标0处定义了一个哨兵, 然后从后往前遍历 //哨兵是为了从后往前遍历时候可以减少一次判断下标问题 int test[]={0,5,44,66,11,12,45,98,58,82

数据结构排序算法插入排序Java实现

public class InsertDemo { public static void main(String args[]) { int[] sort ={4,2,1,3,6,5,9,8,10,7} ; System.out.println("haha"+sort[0]); System.out.println("排序前:"); print(sort); shellSort(sort); System.out.println("\n排序后:"

数据结构和算法-排序算法-插入排序

##################    插入排序        #################### """ 插入算法: alist = [54,26,93,17,77,31,44,55,20] 还是把序列分为两部分, 一开始就把第一个数字认为是有序的, alist = [54, 26,93,17,77,31,44,55,20] 第一轮, 把第二部分的和第一部分的最后一个做比较,如果小就交换, alist = [26,54 93,17,77,31,44,55,20]

数据结构复习之--“插入排序”-JAVA实现

菜鸟中的菜鸟一枚,面临找工作,复习下数据结构,写的插入排序算法记录一下,每天写一点,不断积累吧! import java.util.Scanner; /** * * @author DL * 数据结构复习之插入排序练习程序 * */ public class SortTest { public static void main(String [] args){ Scanner sc = new Scanner(System.in); int totalNums = sc.nextInt();//

JavaScript算法(冒泡排序、选择排序与插入排序)

冒泡排序.选择排序与插入排序复杂度都是指数级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看<计算机科学概论(第三版)>里介绍的选择排序,插入排序看<计算机科学概论(第11版)>里介绍的插入排序, 通过这三份资料弄明白实现原理之后,最后看<学习JavaScript数据结构与算法>一书里的JS实现代码. 嗯,这本书里都有现成代码,就不在这儿写了,关键是弄清楚原理,然后

数据结构--排序

插入排序(上)     基本思想:每次将一个待排序的的元素,按其关键字大小插入到已经排好序的子表的适当位置,直到全部元素插完为止.直接插入排序    简写排序思路:     假设待排序的元素存放在R[0.....n-1]中,在排序过程中,将R划分为两个区间,分别为R[0.....i-1]和R[i....n-1](刚开始时i=1,有序区只有R[0]一个元素),    其中,前一个子区间即是一个已经排好序的子区间,即有序区,后一个子区间则是一个待排序的无序区.   直接插入排序的操作即是:将当前无序