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); }
    
    
    
    
    
  • 相关阅读:
    如何利用U盘重装系统
    对于python爬虫urllib库的一些理解(抽空更新)
    由pthread库版本不一致导致的段错误
    使用WinDBG调试OnDO Server
    直接输出蛇形矩阵
    在Windows 7 x64 上编译libsvn
    Visual Studio Express 2012 安装缺少头文件、库文件的问题
    元和网络的密码加密过程
    有道网络查词的简单分析
    统一项目管理平台(UMPLatForm.NET)【开发实例】之产品管理(WinForm)
  • 原文地址:https://www.cnblogs.com/StormWendy/p/7788439.html
Copyright © 2011-2022 走看看