快速排序

  • 描述
  • 代码实现

描述

快速排序法(quick sort)是目前所公认最快的排序方法之一(视解题的对象而定),虽然快速排序法在最差状况下可以达O(n2),但是在多数的情况下,快速排序法的效率表现是相当不错的。
快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二,分别对左边与右边数列进行排序,而影响快速排序法效率的正是轴心的选择。

代码实现

C++实现:

#include "StdAfx.h"
#include <stdio.h>
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left, int right) {int i, j, t, temp;if(left > right)return;temp = a[left]; //temp中存的就是基准数i = left;j = right;while(i != j) { //顺序很重要,要先从右边开始找while(a[j] >= temp && i < j)j--;while(a[i] <= temp && i < j)//再找右边的i++;       if(i < j)//交换两个数在数组中的位置{t = a[i];a[i] = a[j];a[j] = t;}}//最终将基准数归位a[left] = a[i];a[i] = temp;quicksort(left, i-1);//继续处理左边的,这里是一个递归的过程quicksort(i+1, right);//继续处理右边的 ,这里是一个递归的过程
}
int main() {int i;//读入数据scanf("%d", &n);for(i = 1; i <= n; i++)scanf("%d", &a[i]);quicksort(1, n); //快速排序调用//输出排序后的结果for(i = 1; i < n; i++)printf("%d ", a[i]);printf("%d\n", a[n]);return 0;
}

Java实现:

package com.immunize.Arithmetic;/*** 快速排序* * @author Mr IMMUNIZE**/
public class Quick {public static void main(String[] args) {int[] arr = { 1, 3, 5, 2, 22, 13, 6, 78, 65 };QuickSort(arr, 0, arr.length - 1);Print(arr);}public static void QuickSort(int[] number, int left, int right) {int i, j, crit, tmp;if (left > right)return;crit = number[left];i = left;j = right;while (i != j) {while (number[j] >= crit && i < j) {j--;}while (number[i] <= crit && i < j) {i++;}if (i < j) {tmp = number[i];number[i] = number[j];number[j] = tmp;}}number[left] = number[i];number[i] = crit;QuickSort(number, left, i - 1);QuickSort(number, i + 1, right);}public static void Print(int[] number) {for (int i = 0; i < number.length; i++) {System.out.print(number[i] + " ");}System.out.println();}
}

20191012:快速排序相关推荐

  1. Golang TDD实践报告:快速排序Quick Sort

    Golang TDD实践报告:快速排序Quick Sort [阅读时间:约5分钟] 0.项目需求 1.编写符合项目输入输出的一个测试 2.尝试运行测试 3.先使用最少的代码来让失败的测试先跑起来 4. ...

  2. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  3. 数据结构学习(十三)、快速排序

    基本思想:通过一趟排序将待排记录分割成独立两个部分,其中一部分记录的关键字均比另一部分记录的关键字小, 则可分别对这两部分继续进行排序,重复操作以上操作,已达到整个序列有序的目的 void Quick ...

  4. 快速排序(快排)--->注释超详细

    基本思想:         1.先选取一个基准值(一般选取数组第一个元素).         2.以第一步选取的基准值为标准,然后从最后一个数值开始一步步向前走将数字与基准值进行比较,如果该值大于基准 ...

  5. 快速排序的两种实现方法(c语言版本)

    经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...

  6. 【经典算法】快速排序

    与归并排序一样,快速排序使用也使用了分治的思想.下面是对一个典型的子数组A[p,...,r]进行快速排序的三步分治过程: 分解:数组A[p,...,r]被划分成两个(可能为空)子数组A[P,...,q ...

  7. 20140725 快速排序时间复杂度 sTL入门

    1.快速排序的时间复杂度(平均时间复杂度为) 数组本身就有序时,效果很差为O(n^2) 2.STl入门 (1) C++内联函数(inline)和C中宏(#define)区别 内联函数有类型检查,宏定义 ...

  8. java 快排_八大排序-快速排序(搞定面试之手写快排)

    概要 快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一.其广泛应用的主要原因是高效,核心算法思想是分而治之.快速排序经常会被作为面试题进行考察,通常的考 ...

  9. 排序学习之---快速排序

    一.前言 快速排序是一种交换排序,它由C. A. R. Hoare在1962年提出. 二.算法思想 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都 ...

最新文章

  1. C/C++中的指针变量可以相互赋值,使得它们指向同一块地址空间
  2. mysql sql乱码怎么解决_MYSQL数据库导入SQL文件出现乱码如何解决
  3. linux中popen汉字乱码,Python中使用subprocess.Popen返回值乱码解决方案
  4. 字节序及字节排序函数
  5. concat与concat_ws区别
  6. 一对经典的时间获取客户/服务器程序
  7. 十、简单线性回归的python实现(详解)
  8. 七种武器——.NET工程师求职面试必杀技(转)
  9. 三星530换固态硬盘_速度与安全在指尖跳跃 三星移动固态硬盘T7 Touch评测
  10. cs224n学习笔记 2
  11. 华为AC6605二层组网,配置无线漫游
  12. 什么是数据可视化大屏?有哪些优点
  13. [cnblogs镜像]苹果操作系统名称演变史 新名称macOS
  14. 河北农大计算机专业全国排名,2019河北农业大学现代科技学院专业排名
  15. Lab、RGB、CMY、HSV、HSL
  16. 计算机基础土星,2012年一级B笔试模拟343
  17. 高中数学基础-对数2.2.2对数函数图象及其性质(上)
  18. JAVA-打印星号三角形
  19. PhoneRescue for Mac(iOS数据恢复软件)
  20. 微软针对lapsus$事件的最新调查报告 中文版

热门文章

  1. Python 爬取 20 万条评论,告诉你周杰伦新歌为啥弄崩 QQ 音乐?
  2. 微软将取缔 8 亿 Windows 10 用户的密码!
  3. 当我们谈数据库时,是在谈什么?
  4. Chrome 新 UI 很“难看”,用户很生气
  5. Google 誓要干掉 URL!
  6. 联想在华为背后“捅刀”?谁在让 5G 标准投票成闹剧
  7. 初学编程者如何摆脱搭建开发环境的困扰?
  8. 数据流中的中位数 c语言,41 数据流中的中位数(时间效率)
  9. Java开发全套学习!java微服务网关
  10. 第 2 章 Readme