数据结构(复习排序算法)——选泡插(选择,冒泡,插入,希尔)

Posted littlepage

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(复习排序算法)——选泡插(选择,冒泡,插入,希尔)相关的知识,希望对你有一定的参考价值。

#include <stdio.h>

/**
*  希尔排序(优化)
*  平均时间复杂度:O(n^1.3)
*  平均空间复杂度:O(1)
*  稳定性:不稳定
*  思想理念:分组,进行每个gap都进行除以2,
*  这样大组分小,有利于数据的移动变小
**/
void shell_sort(int a[],int len)
    for(int gap=len>>2;gap>0;gap/=2)
            for(int i=gap;i<len;i++)
                int j,tmp=a[i];
                for(j=i;j>0&&tmp<a[j-gap];j-=gap)
                        a[j]=a[j-gap];
                
                a[j]=tmp;
            
    


/**
*  插入排序(优化)
*  平均时间复杂度:O(n^2)
*  平均空间复杂度:O(1)
*  稳定性:稳定
*  思想理念:从前到后进行循环,从后到前循环,
*  如果前比后大,用一个下标记住,循环结束之后
*  进行交换
**/
void insertion_sort_update(int a[],int len)
    for(int i=1;i<len;i++)
        int j,tmp=a[i];
        for(j=i;j>0&&tmp<a[j-1];j--)
                a[j]=a[j-1];
        
        a[j]=tmp;
    


/**
*  插入排序
*  平均时间复杂度:O(n^2)
*  平均空间复杂度:O(1)
*  稳定性:稳定
*  思想理念:从前到后进行循环,从后到前循环,
*  如果前比后大,那么交换
**/
void insertion_sort(int a[],int len)
    for(int i=1;i<len;i++)
        for(int j=i;j>0&&a[j]<a[j-1];j--)
                int tmp=a[j];
                a[j]=a[j-1];
                a[j-1]=tmp;
        
    


/**
*  选择排序
*  平均时间复杂度:O(n^2)
*  平均空间复杂度:O(1)
*  思想理念:从前到后进行选择,选择最小
*  与最开始的数字进行交换
**/
void selection_sort(int a[],int len)
    for(int i=0;i<len-1;i++)
        int min_num=i;
        for(int j=i+1;j<len;j++)
            if(a[j]<a[min_num]) min_num=j;
        
        int tmp=a[min_num];
        a[min_num]=a[i];
        a[i]=tmp;
    


/**
*  冒泡排序
*  平均时间复杂度:O(n^2)
*  平均空间复杂度:O(1)
*  思想理念:从后向前进行起泡,
*  每个泡泡能够使最大数字浮起来,
*  从而达到排序效果
**/
void bubble_sort(int a[],int len)
    for(int i=len-1;i>=0;i--)
        for(int j=1;j<=i;j++)
            if(a[j]<a[j-1])
                int tmp=a[j];
                a[j]=a[j-1];
                a[j-1]=tmp;
            
        
    


int main()

    int a[]=5,1,4,7,8,6,2;
    shell_sort(a,sizeof(a)/sizeof(int));
    for(int i=0;i<sizeof(a)/sizeof(int);i++) printf("%d ",a[i]);
    system("pause");
    return 0;

 

以上是关于数据结构(复习排序算法)——选泡插(选择,冒泡,插入,希尔)的主要内容,如果未能解决你的问题,请参考以下文章

算法是程序的灵魂之选泡插

2023数据结构考研复习-排序

2023数据结构考研复习-排序

JavaScript 数据结构与算法之美 - 冒泡排序插入排序选择排序

排序算法的程序实现——冒泡排序复习

go-数据结构与算法 复习