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

  • 相关阅读:
    数组解耦
    curl 命令简单应用
    虾米音乐的一个小功能
    bower使用-es6的前提
    nvm安装和使用
    webpack简单入门
    tp5.0入门笔记
    如何将ts文件转为mp4格式
    c语言介绍
    简单工厂模式
  • 原文地址:https://www.cnblogs.com/fusheng-it/p/6549337.html
Copyright © 2011-2022 走看看