C/C++实现快速排序的方法

 更新时间:2014年12月01日 14:43:57   投稿:hebedich  
这篇文章主要介绍了C/C++实现快速排序的方法,这几天在找工作,被问到快速排序,结果想不出来快速排序怎么弄的;回来搜索了一下,现在记录下来,方便以后查看。

快速排序不会直接得到最终结果,只会把比k大和比k小的数分到k的两边。(你可以想象一下i和j是两个机器人,数据就是大小不一的石头,先取走i前面的石头留出回旋的空间,然后他们轮流分别挑选比k大和比k小的石头扔给对面,最后在他们中间把取走的那块石头放回去,于是比这块石头大的全扔给了j那一边,小的全扔给了i那一边。只是这次运气好,扔完一次刚好排整齐。)为了得到最后结果,需要再次对下标2两边的数组分别执行此步骤,然后再分解数组,直到数组不能再分解为止(只有一个数据),才能得到正确结果。 —— 取自百度百科(链接)

C/C++ 实现:

复制代码 代码如下:

void quick_sort(int* a, int low, int high){ if (low >= high) {
    return;
} int first = low; int last = high; int key = a[first]; while (first < last) {
    while (first < last && a[last] >= key) {
        --last;
    }
    a[first] = a[last];
 
    while (first < last && a[first] <= key) {
        ++first;
    }
    a[last] = a[first];
}
a[first] = key;
quick_sort(a, low, first-1);
quick_sort(a, first+1, high);
}

相关文章

  • QT实现贪吃蛇游戏代码详解

    QT实现贪吃蛇游戏代码详解

    本文主要为大家详细介绍了在QT中实现贪吃蛇游戏的详细教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 浅谈C语言函数调用参数压栈的相关问题

    浅谈C语言函数调用参数压栈的相关问题

    下面小编就为大家带来一篇浅谈C语言函数调用参数压栈的相关问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • C语言/C++中如何产生随机数

    C语言/C++中如何产生随机数

    这里要用到的是rand()函数, srand()函数,和time()函数。需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib.h;而使用time()函数需要引入ctime头文件
    2013-10-10
  • C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别

    C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别

    这篇文章主要介绍了C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别的相关资料,需要的朋友可以参考下
    2017-04-04
  • C语言静态链表和动态链表

    C语言静态链表和动态链表

    静态链表和动态链表是线性表链式存储结构的两种不同的表示方式。静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针。动态链表是相对于静态链表而言的,一般地,在描述线性表的链式存储结构时如果没有特别说明即默认描述的是动态链表。
    2016-05-05
  • C++和java设计模式之单例模式

    C++和java设计模式之单例模式

    这篇文章主要为大家详细介绍了C++和java设计模式之单例模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • C++实现翻转单词顺序

    C++实现翻转单词顺序

    这篇文章给大家汇总介绍了C++实现翻转单词顺序的三种方法,都非常的简单,需要的朋友可以参考下
    2016-07-07
  • c++网络编程下Linux的epoll技术和Windows下的IOCP模型

    c++网络编程下Linux的epoll技术和Windows下的IOCP模型

    c++ 网络编程LINUX-epoll/windows-IOCP下socket opoll函数用法 优于select方法的epoll 以及windows下IOCP 解决多进程服务端创建进程资源浪费问题,感兴趣的小伙伴一起来学习吧
    2021-08-08
  • 详解C++ STL vector容量(capacity)和大小(size)的区别

    详解C++ STL vector容量(capacity)和大小(size)的区别

    这篇文章主要介绍了详解C++ STL vector容量(capacity)和大小(size)的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • C语言中单链表的基本操作指南(增删改查)

    C语言中单链表的基本操作指南(增删改查)

    链表跟数组不同的是非连续存储结构,也就是说实现链表需要一个指针,每用完一个节点指针指向下一个节点,直至表尾,下面这篇文章主要给大家介绍了关于C语言中单链表的基本操作之增删改查的相关资料,需要的朋友可以参考下
    2021-09-09

最新评论