数据结构(复习排序算法)——选泡插

点点圈 提交于 2019-11-29 03:41:59
#include <stdio.h>

/**
*  插入排序(优化)
*  平均时间复杂度: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};
    insertion_sort_update(a,sizeof(a)/sizeof(int));
    for(int i=0;i<sizeof(a)/sizeof(int);i++) printf("%d ",a[i]);
    system("pause");
    return 0;
}

 

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