• 排序算法复习


    一、排序(一)

    1. 冒泡排序 Bubble Sort O(N^2) 稳定排序算法

    void bubble_sort1(int a[], int n)//n是数组长度
    {
        int i, j;
    int flag;
    for(i=n-1;i>0;i--) {
    flag=0;//初始化标记为0
    for(j=0;j<i;j--) { if(a[j]>a[j+1]) swag(a[j], a[j+1]);
    flag=1; }
    if(flag==0)
    break;
    } }

    2. 快排 Quick Sort O(N*lgN) 最坏情况O(N^2) 非稳定排序算法

    void quick_sort(int a[], int l, int r)
    {
        if (l<r)
        {
            int i,j,x;//x为基准值
    
            i=l;
            j=r;
            x=a[i];
            while(i<j) {
                while (i < j && a[j] > x)
                    j--;//从右向左找第一个小于x的数
                if (i < j)
                    a[i++] = a[j];
                while (i < j && a[i] < x)
                    i++;
                if (i < j)
                    a[j--] = a[i];
            }
            a[i]=x;
            quick_sort(a,l,i-1);//对小于基准部分进行快速排序递归调用
            quick_sort(a,i+1,r);//对大于基准部分进行快速排序递归调用
        }
    }

    3. 直接插入排序 Straight Insertion Sort  O(N^2)  稳定排序算法

    void insert_sort(int a[], int n)
    {
        int i,j,k;
    
        for(i=1;i<n;i++){
            for(j=i-1;j>=0;j--)
                if(a[j]<a[i])
                    break;
            if(j!=i-1)
            {
                //将比a[i]大的数据向后移
                int temp=a[i];
                for(k=i-1;k>j;k--)
                    a[k+1]=a[k];
                //将a[i]放到正确位置
                a[k+1]=temp;
            }
        }
    }

    4. 希尔排序(缩小增量排序) Shell Sort 不稳定

    void shell_sort1(int a[], int n)
    {
        int i, j, gap;
        //gap为步长,每次减少为原来的一半
        for(gap=n/2;gap>0;gap/=2)
        {
            //共gap个分组,对每一组执行直接插入排序
            for(i=0;i<gap;i++)
            {
                for(j=i+gap;j<n;j+=gap)
                {
                    //如果a[j]<a[j-gap],则寻找a[j]位置,并将后面数据的位置都后移
                    if(a[j]<a[j-gap])
                    {
                        int tmp=a[j];
                        int k=j-gap;
                        while(k>=0&&a[k]>tmp)
                        {
                            a[k+gap]=a[k];
                            k-=gap;
                        }
                        a[k+gap]=tmp;
                    }
                }
            }
        }
    }

    5. 选择排序 Select Sort O(N^2)  稳定排序算法

    void select_sort(int a[], int n)
    {
        int i;//有序区的末尾位置
        int j;//无序区的起始位置
        int min;//无序区中最小元素位置
        
        for(i=0;i<n;i++){
            min=i;
            //找出a[i+1]到a[n]之间的最小元素,并赋值给min;
            for(j=i+1;j<n;j++)
            {
                if(a[j]<a[min])
                    min=j;
            }
            
            //若min!=i, 则交换a[i]和a[min]
            //交换之后,保证了a[0]...a[i]之间的元素是有序的
            if(min!=i)
                swap(a[i], a[min]);
        }
    }
  • 相关阅读:
    输出流
    异常处理
    异常限制
    多个受控异常
    跟踪异常传播
    动手动脑练习2
    动手动脑练习
    文件总结
    程序员修炼之道3
    Shell教程 之printf命令
  • 原文地址:https://www.cnblogs.com/jdbc2nju/p/15866388.html
Copyright © 2020-2023  润新知