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


    #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;
    }
  • 相关阅读:
    curl 的使用,参数大全
    ubuntu 编译安装php5扩展
    ubuntu 编译安装 php5.6.40
    ubuntu 编译安装 mysql5.7.32
    ubuntu 编译安装 apache2.4.46
    Android 逆向工具总结
    mariadb 和 mysql 之间的版本关系
    ubuntu 使用 apt 安装 apache2 php7 mysql8
    linux 系统安装 pip
    P2756 飞行员配对方案问题 提交 13.91k 通过 7.59k 时间限制 1.00s 内存限制 125.00MB 返回题目
  • 原文地址:https://www.cnblogs.com/littlepage/p/11444482.html
Copyright © 2020-2023  润新知