设为首页 加入收藏

TOP

插入排序的三种算法C/C++(一)
2017-03-30 14:17:13 】 浏览:537
Tags:插入 排序 算法 C/C

插入排序的三种算法C/C++:一、直接插入排序:1、平均时间复杂度为O(n^2)2、最好情况为O(n)3、最坏情况下为O(n^2)4、空间复杂度为O(1)。

算法实现为:

/*
 *直接插入排序
 */

#include
  
   

#define MaxSize 100

/*
 *a为待排序的数组,length为数组长度
 */
void inSort(int a[] , int length) ;

/*
 *进行数组元素的输出
 */
void displayArray(int a[] , int length) ;

void main()
{
    int a[MaxSize] , length , i ;
    printf("Please input the length of the array : \n") ;
    scanf("%d" , &length) ;

    //进行数组元素的接收
    for(i = 0 ; i < length ; i++)
    {
        scanf("%d" , &a[i]) ;
    }

    printf("Before sort... \n") ;
    displayArray(a , length) ;

    inSort(a , length) ;

    printf("After sort... \n") ;
    displayArray(a , length) ;
}

void inSort(int a[] , int length)
{
    //临时储存元素
    int temp ;
    int i , j ;             
    for(i = 1 ; i < length ; i++)
    {
        temp = a[i] ;
        j = i - 1 ;
        while(temp < a[j] && j >= 0)
        {
            a[j + 1] = a[j] ;           
            j-- ;
        }
        a[j + 1] = temp ;
    }
}

void displayArray(int a[] , int length)
{   
    int i ;
    for(i = 0 ; i < length ; i++)
    {
        printf("%4d ", a[i]);
    }
    printf("\n") ;
}
  

二、折半插入排序
1、平均时间复杂度为O(n^2)
2、最好情况为O(nlogn)
3、最坏情况下为O(n^2)
4、空间复杂度为O(1)

算法实现为:

/*
 *折半插入排序
 */

#include
  
   

#define MaxSize 100

/*
 *a为待排序的数组,length为数组长度
 */
void binSort(int a[] , int length) ;

/*
 *进行数组元素的输出
 */
void displayArray(int a[] , int length) ;

void main()
{
    int a[MaxSize] , length , i ;
    printf("Please input the length of the array : \n") ;
    scanf("%d" , &length) ;

    //进行数组元素的接收
    for(i = 0 ; i < length ; i++)
    {
        scanf("%d" , &a[i]) ;
    }

    printf("Before sort... \n") ;
    displayArray(a , length) ;

    binSort(a , length) ;

    printf("After sort... \n") ;
    displayArray(a , length) ;
}

void binSort(int a[] , int length)
{
    int i , j , mid , low , high , temp ;
    for(i = 1 ; i < length ; i ++)
    {
        low = 0 ;
        high = i - 1 ;
        temp = a[i];
        while(low <= high)
        {
            mid = (low + high) / 2 ;
            if(temp < a[mid])
            {
                high = mid - 1 ;
            }else{
                low = mid + 1 ;
            }
        }
        for(j = i - 1 ; j >= low ; j--)
        {
            a[j + 1] = a[j] ;
        }
        a[low] = temp ;
    }   
}

void displayArray(int a[] , int length)
{   
    int i ;
    for(i = 0 ; i < length ; i++)
    {
        printf("%4d ", a[i]);
    }
    printf("\n") ;
}
  

三、希尔排序
1、平均时间复杂度为O(n^1.5)
4、空间复杂度为O(1)

算法实现为:

/*
 *希尔排序
 */

#include
  
   

#define MaxSize 100

/*
 *进行希尔排序
 *a为待排序数组,lengh为数组长度,delta为增量数组,length1为增量数组的长度
 */
void shellSort(int a[] , int lengh , int delta[] , int length1) ;

/*
 *进行一趟希尔排序
 */
void shellInsert(int a[] , int length , int delta) ;

/*
 *进行数组的输出
 */
void displayArray(int a[] , int length) ;

void main()
{
    int a[MaxSize] , length , i ;
    int delta[MaxSize] , length1 ;

    printf("Please input the length of the array : ") ;
    scanf("%d" , &length) ;

    //进行数组元素的接收
    for(i = 0 ; i < length ; i++)
    {
        scanf("%d" , &a[i]) ;
    }

    //进行增量数组的接收
    printf("Please input the delta's length : ") ;
    scanf("%d" , &length1) ;

    //进行数组元素的接收
    for(i = 0 ; i < length1 ; i++)
    {
        scanf("%d" , &delta[i]) ;
    }

    printf("Before sort... \n") ;
    displayArray(a , length) ;

    shellSort(a , length , delta , length1) ;

    printf("After sort... \n") ;
    displayArray(a , length) ;
}

void shellSort(int a[] , int length , int
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++重定义变量类型 下一篇c++ (iomanip) 笔记

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目