zoukankan      html  css  js  c++  java
  • 数据结构(复习排序算法)——选泡插(选择,冒泡,插入,希尔)

    #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;
    }
  • 相关阅读:
    JavaWeb 内存马一周目通关攻略
    Android应用攻与防
    JavaWeb 内存马二周目通关攻略
    Mysql 5.7 windows安装 zip安装
    [JavaScript] 单例模式
    [JavaScript] 策略模式
    Leecode刷题笔记
    Java面经
    一些开源项目在ARM上的移植
    ffmpeg和SDL的多媒体编程(二)输出到屏幕
  • 原文地址:https://www.cnblogs.com/littlepage/p/11444482.html
Copyright © 2011-2022 走看看