zoukankan      html  css  js  c++  java
  • 排序算法和实现

    最近在看排序算法,看着写着吧,代码是用的c++,我运行没有问题,有问题的话请指正。

    一、快速排序

    基本思想就是,先选择队列中的一个数,比它小的在左边,比它大的在右边,然后再对它左右的序列递归排序。

    代码解释:swap用来交换2个数,Partion用来随机选择一个位置,其左边的数都小于它,右边的数都大于它,并返回这个数的位置,quickSort用来递归排序。

    Partion:先用随机数选择个在begin和end之间的位置,然后将它和序列最后一个元素交换,最后一个元素就是待比较的元素,即为a[end],比它小的在左边,比它大的在右边。具体比较:

    用small比a[end]小的元素最后一个位置,small后面的位置是比a[end]大的元素,比较的过程中遇到比a[end]大的元素就让small++,让smal位置和这个元素交换,这样,small左边永远是小于a[end]的,small右边永远大于a[end],最后把samll后面的大元素和a[end]交换,将a[end]放回正确的位置(它左边的比它小,右边的比它大)。

    
    
    void swap(int*a, int*b){
        int c = *a;
        *a = *b;
        *b = c;
    }
    int Partion(int a[], int length, int begin, int end){
    //length需要比较的序列的长度,begin比较的起始位置,比较的结束位置
    if (length <= 0 || begin<0 || end>length) return -1; int index = begin+rand() % length;//注意这里是产生begin到end位置的数 swap(&a[index], &a[end]); int small = begin - 1; for (int i = begin; i < end; i++){ if (a[i] < a[end]){ small++; if (small != i) swap(&a[small], &a[i]); } } small++; swap(&a[small], &a[end]); return small; } void quickSort(int a[], int length, int begin, int end){ if (begin == end) return; int index = Partion(a, length, begin, end); if (index>begin) quickSort(a, index-begin, begin, index-1); if (index<end) quickSort(a,end-index, index+1,end); }
    
    
    
    
    
  • 相关阅读:
    日志组件logback的介绍及配置使用方法(二)
    日志组件logback的介绍及配置使用方法(一)
    MyBatis+MySQL 返回插入的主键ID
    基于shiro-cas的单点登录、单点登出、统一认证授权系统
    使用Redis存储Nginx+Tomcat负载均衡集群的Session
    数字转大写钱币
    世界四大汽车生产公司
    强制登陆远程桌面
    sql 获取连续年份
    SQL 递归
  • 原文地址:https://www.cnblogs.com/StormWendy/p/7788439.html
Copyright © 2011-2022 走看看