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

匿名 (未验证) 提交于 2019-12-02 23:57:01
#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; }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!