插入排序

一.直接插入排序( straight insertion sort )是一种最简单的排序方法。
它的基本操作是将一个记录插入到一个长度为 m (假设)的有序表中,使之仍保持有序,从而得到一个新的长度为 m + 1 的有序表。


 

此算法外循环 n-1 次,在一般情况下内循环平均比较次数的数量级为O(n) ,所以算法总时间复杂度为O(n2) 。

插入排序的过程中,比较的过程就是一个查找的过程,为了更加快速的找到“合适的位置”,可以使用高效些的查找算法,例如和折半查找结合,就形成了  折半插入排序。

 



#include<stdio.h> void insertionsort(int a[],int n) { int i,j,key; for(i=1;i<n;i++){ key=a[i]; for(j=i-1;a[j]>key;j--) a[j+1]=a[j]; a[j+1]=key; } } int main() { int i,n; int a[100]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); insertionsort(a,n); for(i=0;i<n;i++) printf("%d ",a[i]); }
#include <iostream>
using namespace std;
const int n=10 ;
int main( )
{
void f(int a[],int n ) ;
int a[n] ={  42,65,80,74,36,44,28,65,94,72 } ;
    f(a,n) ;
  for(int i=0; i<n; i++) 
  cout<<a[i]<<" "   ;
  cout<<endl ;    
}
 
void f(int a[],int n)
{
    int i,j,x ;
    for(i=1;i<n ;i++)
    {
        x=a[i] ;
        for(j=i-1;j>=0;j--)
        if(x<a[j]) 
             a[j+1]=a[j] ;
          else   break   ;
          a[j+1]=x       ;    
    }
}
#include<stdio.h>
#define M 100
int R[M];

void insertSort(int n)
{
    int i,j;
    for (i=1;i<n;i++)
   { 
    if(R[i]<R[i-1]) 
    {
           R[0]=R[i]; 
      for(j=i-1;R[j]>R[0];j--) 
                          R[j+1]=R[j]; 
      R[j+1]=R[0]; 
     } 

  } 
}
int main()
{
    int i,n;
       scanf("%d",&n);
    for (i=1;i<=n;i++)
        scanf("%d",&R[i]);
    
    printf("before sort numbers 
");
      for (i=1;i<=n;i++)
          printf("%4d",R[i]);
    
    insertSort(n);/*调用直接插入了排序*/
    printf("
 after sort numbers 
");
    for (i=1;i<=n;i++)
        printf("%4d",R[i]);
}
原文地址:https://www.cnblogs.com/wangprince2017/p/7654521.html