zoukankan      html  css  js  c++  java
  • 算法练习(一:排序算法)

      这里用c语言介绍比较常用的排序算法:冒泡法,交换法,选择法,插入法和快速排序这五种排序算法,并计算算法的时间复杂度。

      代码如下:

    #include <stdio.h>
    
    void printList(int a[]){
        for (int i = 0; i<10; i++) {
            printf(" %d",a[i]);
        }
        printf("
    ");
    }
    void bubbleSort(int a[]){
        for (int i = 0 ; i<10; i++) {
            for (int j = 9; j>i; j--) {
                if (a[j]<a[j-1]) {
                    int timp = a[j-1];
                    a[j-1] =a[j];
                    a[j] = timp;
                }
            }
        }
    }
    void exchangeSort(int a[]){
        for (int i = 0; i<10; i++) {
            for (int j = 9 ; j>i; j--) {
                if (a[i]>a[j]) {
                    int timp = a[i];
                    a[i] =a[j];
                    a[j] = timp;
                }
            }
        }
    }
    void selectSort(int a[]){
        for (int i = 0; i<10; i++) {
            int minIndex = i;
            for (int j = 9 ; j>i; j--) {
                if (a[j]<a[minIndex]) {
                    minIndex = j;
                }
            }
            int timp = a[minIndex];
            a[minIndex] =a[i];
            a[i] = timp;
        }
    }
    void insertSort(int a[]){
        for (int i = 1; i<10; i++) {
            if (a[i]<a[i-1]) {
                int j = i;
                int temp = a[i];
                while (a[j-1]>temp&&j>0) {
                    a[j] = a[j-1];
                    j--;
                }
                a[j] = temp;
            }
        }
    }
    void quickSort(int a[] , int left ,int right){
        if (left>right) {
            return;
        }
        int i = left;
        int j = right;
        int p = a[i];
        while(i < j)
        {
            while(i< j && p <a[j])
            {
                j --;
            }
            a[i] = a[j];
            while(i < j && p >a[i])
            {
                i ++;
            }
            a[j] = a[i];
        }
        a[i] = p;
        quickSort(a,left,i -1);
        quickSort(a,i +1, right);
    }
    int main(int argc, const char * argv[]) {
        int a[] = {9,8,7,6,5,4,3,2,1,0};
        printf("初始化数组
    ");
        printList(a);
    //    bubbleSort(a);
    //    exchangeSort(a);
    //    selectSort(a);
    //    insertSort(a);
        quickSort(a,0,9);
        printf("排序后数组
    ");
        printList(a);
        return 0;
    }

    时间复杂度及方法核心思想

    1.冒泡法:通过相邻两个数的两两比较大小。算法的时间复杂度:O(n^2)

    2.交换法:从前往后比较,遇到较小的交换。算法的时间复杂度:O(n^2)

    3.选择法:选择一个最小(或最大)的进行交换。算法的时间复杂度:O(n^2)

    4.插入法:选择一个最小(或最大)的插入到合适的位置。算法的时间复杂度:O(n^2)

    5.快速排序法:从中找出一个中间数,比改数大的和小的防止该数的两侧。利用递归一次进行。算法的时间复杂度:O(nlogn)

    demo下载地址:https://github.com/fushengit/automatic

  • 相关阅读:
    IIS7中的几种身份鉴别方式(一)Basic身份验证
    IIS7中的几种身份鉴别方式(二)集成身份验证
    java集合
    SharePoint 2010中welcome page的设置细节
    SharePoint中使用Linq出现未将对象引用到实例化的解决方法
    SharePoint 2010中关于An error was encountered while retrieving the user profile的处理方式记录
    The Need for an Architectural Body of Knowledge
    The Softer Side of the Architect
    Event Receivers 学习小结
    使用SmtpClient发送带图片的邮件的代码实现
  • 原文地址:https://www.cnblogs.com/fusheng-it/p/6549337.html
Copyright © 2011-2022 走看看