zoukankan      html  css  js  c++  java
  • 几种常见的排序算法

    插入排序

    算法思想:从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]);
        }
    }
  • 相关阅读:
    出现( linker command failed with exit code 1)错误总结 (转)
    iOS 面试题
    iOS 网络-深入浅出 -> 三方SDWebImage
    免费的论文查重网站
    关于GCD中单例的实现,不仅仅是 dispatch_once(视图完整版)
    Objective
    iOS 实现代码编写中 字典属性的可读性
    iOS Category 和 Protocol 中的 Property 你们真的会了么?
    iOS 中的观察者模式之通知中心
    iOS中的 观察者模式 之 KVO
  • 原文地址:https://www.cnblogs.com/nanguabushuohua/p/7568923.html
Copyright © 2011-2022 走看看