• 几种常见的排序算法


    插入排序

    算法思想:从1开始,往后比较,比它小的就替换

    实现如下:

    //
    //  main.c
    //  insert
    //
    //  Created by 南瓜不说话 on 2017/9/21.
    //  Copyright © 2017年 南瓜不说话. All rights reserved.
    //
    
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    void sort(int *p){
        int j;
        int tmp;
        for(int i = 1;i < 100;i++){
            j = i-1;
            tmp = p[i];
            while(p[j] > tmp && j>=0){
                p[j+1] = p[j];
                j--;
            }
            p[j+1] = tmp;
        }
    }
    
    int main(int argc, const char * argv[]) {
        srand((int)time(0));
        int ar[100];
        for (int i = 0;i < 100;i++){
            ar[i] = (int)(rand()%100);
        }
        int *p = ar;
        sort(p);
        for(int i = 0;i < 100;i++){
            printf(" %d",p[i]);
        }
        printf("
    ");
        return 0;
    }

    快速排序

    算法思想:取一个值,比它小的交换到它左边,比它大的交换到它右边

    代码实现如下:

      3 //
      5 //  main.c
      7 //  quit
      9 //
     11 //  Created by 南瓜不说话 on 2017/9/21.
     13 //  Copyright © 2017年 南瓜不说话. All rights reserved.
     15 //
     19 #include <stdio.h>
     20 
     21 #include <stdlib.h>
     23 #include<time.h>
    
     31 void sort(int min,int max,int *arr){
     33     int j=max;
     35     int i=min;
     37     int flag=arr[min];
     39     if(min>=max){
     41         return ;
     43     }
     45     while (i<j) {
     47         while (i<j && arr[j]>=flag) {
     49             j--;
     51         }
     53         arr[i]=arr[j];
     55         while (i<j && arr[i]<=flag) {
     57             i++;
     59         }
     61         arr[j]=arr[i];
     63     }
     65     arr[i]=flag;
     67     printf(" %d
    ",min);
     69     sort(min,i-1,arr);
     71     sort(i+1,max,arr);
     75 }
     79 int main(){
     81     srand((int)time(0));
     83     int ar[100];
     85     for (int i=0;i<100;i++){
     87         ar[i]=(int)(rand()%100);
     89     }
     91     int length=sizeof(ar)/sizeof(ar[0]);
     93     int *p=ar;
     95         sort(0,length,p);
     97         for(int i=0;i<100;i++){
     99             printf(" %d",p[i]);
    101         }
    103     printf("
    ");
    105     return 0;
    107 }
    108 

     归并排序:

    归并排序思路第一遍看的时候没看懂,不明白怎么合并的,然后网上看了下别人写的代码,豁然开朗。

    算法思想:

     1.递归拆分数组 

        递归将数组平分成二等分,一直拆分到单个元素

     2.递归合并数组

        将数据递归合并,合并之前的数组是一个有序数组

    //
    //  main.c
    //  merge
    //
    //  Created by 南瓜不说话 on 2017/9/22.
    //  Copyright © 2017年 南瓜不说话. All rights reserved.
    //
    
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    void merge(int *p,int *t,int min,int middle,int max){
        int i =min;
        int j=middle+1;
        int k=min;
        while (i<middle+1&&j<max+1) {
            if(p[i]>p[j])
            t[k++] = p[j++];
            else
                t[k++]=p[i++];
        }
        while (i<middle+1) {
            t[k++]=p[i++];
        }
        while (j<max+1) {
            t[k++]=p[j++];
        }
        for (i=min; i<k; i++) {
            p[i]=t[i];
        }
    }
    
    void mergeSort(int *p,int *t,int min,int max){
        if(min<max){
            int middle=(max+min)/2;
            mergeSort(p, t,min, middle);
            mergeSort(p,t, middle+1, max);
            merge(p,t,min,middle,max);
        }
    }
    
    int main(int argc, const char * argv[]) {
        srand((int)time(0));
        int arr[100];
        for (int i = 0;i < 100;i++){
            arr[i] = (int)(rand()%100);
        }
        int tmp[100];
        int *t = tmp;
        int *p = arr;
        mergeSort(p,t,0,99);
        for(int i=0;i<100;i++){
            printf(" %d",p[i]);
        }
    }
  • 相关阅读:
    mysql获取给定时间段内的所有日期列表
    mysql中的年,月,日统计以及日历表的实现
    MySQL5.7安装配置
    获取ip地址
    Intellij热部署插件JRebel
    IntelliJ IDEA2018版热部署jrebel插件安装使用教程
    idea插件篇之java内存分析工具(JProfiler)
    mysql中的整除,取余
    SIMD.mul (SIMD) – JavaScript 中文开发手册
    Java面试题 : 如何确保N个线程访问N个资源的同时又不导致死锁
  • 原文地址:https://www.cnblogs.com/nanguabushuohua/p/7568923.html
Copyright © 2020-2023  润新知