我的编程空间,编程开发者的网络收藏夹
学习永远不晚

web如何实现快速排序

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

web如何实现快速排序

这篇文章主要为大家展示了“web如何实现快速排序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web如何实现快速排序”这篇文章吧。

快速排序是对冒泡排序的一种改进。它的基本思想是:通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归或者非递归进行,以此达到整个数据变成有序序列。

1. 算法步骤

  1. 从数列中挑出一个元素,称为 “基准”(pivot);
  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

2. 动图演示

web如何实现快速排序

代码实现

JavaScript

实例

function quickSort(arr, left, right) {   var len = arr.length,       partitionIndex,       left = typeof left != 'number' ? 0 : left,       right = typeof right != 'number' ? len - 1 : right;   if (left return arr;}function partition(arr, left ,right) {     // 分区操作   var pivot = left,                      // 设定基准值(pivot)       index = pivot + 1;   for (var i = index; i if (arr[i] return index-1;}function swap(arr, i, j) {   var temp = arr[i];   arr[i] = arr[j];   arr[j] = temp;}function partition2(arr, low, high) { let pivot = arr[low]; while (low while (low  pivot) {     --high;   }   arr[low] = arr[high];   while (low return low;}function quickSort2(arr, low, high) { if (low let pivot = partition2(arr, low, high);   quickSort2(arr, low, pivot - 1);   quickSort2(arr, pivot + 1, high); } return arr;}
Python

实例

def quickSort(arr, left=None, right=None):   left = 0 if not isinstance(left,(int, float)) else left   right = len(arr)-1 if not isinstance(right,(int, float)) else right   if left return arrdef partition(arr, left, right):   pivot = left   index = pivot+1   i = index   while  i if arr[i] return index-1def swap(arr, i, j):   arr[i], arr[j] = arr[j], arr[i]
Go

实例

func quickSort(arr []int) []int {       return _quickSort(arr, 0, len(arr)-1)}func _quickSort(arr []int, left, right int) []int {       if left return arr}func partition(arr []int, left, right int) int {       pivot := left       index := pivot + 1       for i := index; i if arr[i] return index - 1}func swap(arr []int, i, j int) {       arr[i], arr[j] = arr[j], arr[i]}
C++

实例

//严蔚敏《数据结构》标准分割函数Paritition1(int A[], int low, int high) {  int pivot = A[low];  while (low while (low = pivot) {      --high;    }    A[low] = A[high];    while (low return low;}void QuickSort(int A[], int low, int high) //快排母函数{  if (low
Java

实例

public class QuickSort implements IArraySort {   @Override   public int[] sort(int[] sourceArray) throws Exception {       // 对 arr 进行拷贝,不改变参数内容       int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);       return quickSort(arr, 0, arr.length - 1);   }   private int[] quickSort(int[] arr, int left, int right) {       if (left return arr;   }   private int partition(int[] arr, int left, int right) {       // 设定基准值(pivot)       int pivot = left;       int index = pivot + 1;       for (int i = index; i if (arr[i] return index - 1;   }   private void swap(int[] arr, int i, int j) {       int temp = arr[i];       arr[i] = arr[j];       arr[j] = temp;   }}
PHP

实例

function quickSort($arr){   if (count($arr) return $arr;   $middle = $arr[0];   $leftArray = array();   $rightArray = array();   for ($i = 1; $i $arr); $i++) {       if ($arr[$i] > $middle)           $rightArray[] = $arr[$i];       else           $leftArray[] = $arr[$i];   }   $leftArray = quickSort($leftArray);   $leftArray[] = $middle;   $rightArray = quickSort($rightArray);   return array_merge($leftArray, $rightArray);}
C

实例

typedef struct _Range {   int start, end;} Range;Range new_Range(int s, int e) {   Range r;   r.start = s;   r.end = e;   return r;}void swap(int *x, int *y) {   int t = *x;   *x = *y;   *y = t;}void quick_sort(int arr[], const int len) {   if (len return; // 避免len等於負值時引發段錯誤(Segment Fault)   // r[]模擬列表,p為數量,r[p++]為push,r[--p]為pop且取得元素   Range r[len];   int p = 0;   r[p++] = new_Range(0, len - 1);   while (p) {       Range range = r[--p];       if (range.start >= range.end)           continue;       int mid = arr[(range.start + range.end) / 2]; // 選取中間點為基準點       int left = range.start, right = range.end;       do {           while (arr[left] while (arr[right] > mid) --right; //檢測基準點右側是否符合要求           if (left while (left if (range.start if (range.end > left) r[p++] = new_Range(left, range.end);   }}
递归法

实例

void swap(int *x, int *y) {   int t = *x;   *x = *y;   *y = t;}void quick_sort_recursive(int arr[], int start, int end) {   if (start >= end)       return;   int mid = arr[end];   int left = start, right = end - 1;   while (left while (arr[left] while (arr[right] >= mid && left if (arr[left] >= arr[end])       swap(&arr[left], &arr[end]);   else       left++;   if (left)       quick_sort_recursive(arr, start, left - 1);   quick_sort_recursive(arr, left + 1, end);}void quick_sort(int arr[], int len) {   quick_sort_recursive(arr, 0, len - 1);}
C++

函数法

sort(a,a + n);// 排序a[0]-a[n-1]的所有数.

迭代法

实例

// 参考:http://www.dutor.net/index.php/2011/04/recursive-iterative-quick-sort/struct Range {   int start, end;   Range(int s = 0, int e = 0) {       start = s, end = e;   }};template  // 整數或浮點數皆可使用,若要使用物件(class)時必須設定"小於"("大於"(>)、"不小於"(>=)的運算子功能void quick_sort(T arr[], const int len) {   if (len return; // 避免len等於負值時宣告堆疊陣列當機   // r[]模擬堆疊,p為數量,r[p++]為push,r[--p]為pop且取得元素   Range r[len];   int p = 0;   r[p++] = Range(0, len - 1);   while (p) {       Range range = r[--p];       if (range.start >= range.end)           continue;       T mid = arr[range.end];       int left = range.start, right = range.end - 1;       while (left while (arr[left] while (arr[right] >= mid && left if (arr[left] >= arr[range.end])           std::swap(arr[left], arr[range.end]);       else           left++;       r[p++] = Range(range.start, left - 1);       r[p++] = Range(left + 1, range.end);   }}
递归法

实例

templatevoid quick_sort_recursive(T arr[], int start, int end) {   if (start >= end)       return;   T mid = arr[end];   int left = start, right = end - 1;   while (left while (arr[left] while (arr[right] >= mid && left if (arr[left] >= arr[end])       std::swap(arr[left], arr[end]);   else       left++;   quick_sort_recursive(arr, start, left - 1);   quick_sort_recursive(arr, left + 1, end);}template  //整數或浮點數皆可使用,若要使用物件(class)時必須設定"小於"("大於"(>)、"不小於"(>=)的運算子功能void quick_sort(T arr[], int len) {   quick_sort_recursive(arr, 0, len - 1);}

以上是“web如何实现快速排序”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

web如何实现快速排序

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

web如何实现快速排序

这篇文章主要为大家展示了“web如何实现快速排序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web如何实现快速排序”这篇文章吧。快速排序是对冒泡排序的一种改进。它的基本思想是:通过一次排序将要
2023-06-27

web开发中如何实现快速排序

小编给大家分享一下web开发中如何实现快速排序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!快速排序快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序
2023-06-19

Python如何实现快速排序

这篇文章主要介绍“Python如何实现快速排序”,在日常操作中,相信很多人在Python如何实现快速排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何实现快速排序”的疑惑有所帮助!接下来,请跟
2023-06-04

java中如何实现快速排序

下面由java入门学习栏目为大家介绍java中如何实现快速排序,希望这种算法排序可以帮助到大家!快速排序的时间复杂度并不固定,如果在最坏情况下(在一个原本逆向排序的数列中选择第一个元素为基准元素)速度比较慢,达到 O(n^2)(和选择排序一个效率),但是如果在
java中如何实现快速排序
2018-05-13

java如何实现快速排序算法

这篇文章将为大家详细讲解有关java如何实现快速排序算法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。快速排序算法使用的分治法策略来把一个序列分为两个子序列来实现排序的思路:1.从数列中挑出一个元素,称为
2023-06-02

C语言如何实现快速排序

今天小编给大家分享一下C语言如何实现快速排序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。交换排序的思想基本思想:所谓交换,
2023-07-02

python实现快速排序

def sortList(alist):    alen = len(alist)    if alen == 0:        return alist    if alen > 0:        aitem = alist[alen
2023-01-31

python 快速排序实现

import random num_list = []for x in range(30): num_list.append(random.randint(1, 500))list_len = len(num_list)print(l
2023-06-02

快速排序python实现

快速排序快速排序的实现同样使用分治法,它的原理是从序列中选择一个值作为基准值,然后分成比基准值小的序列集合和比基准值小的序列集合和与基准值相等的序列集合。再将比基准值小的序列集合和比基准值小的序列集合再次进行选择基准值分割,最后再从下到上每
2023-01-31

Python3实现快速排序、归并排序、堆

# -*- coding: utf-8 -*-# @Time : 2019-03-26 16:46# @Author : Jayce Wong# @ProjectName : leetcode# @FileNa
2023-01-31

如何使用C语言实现快速排序

本篇内容主要讲解“ 如何使用C语言实现快速排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ 如何使用C语言实现快速排序”吧!快速排序的基本思想是:任取待排序数列中的一个数作为 key 值,通过
2023-07-05

C语言如何实现快速排序算法

这篇文章将为大家详细讲解有关C语言如何实现快速排序算法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码#define _CRT_SECURE_NO_WARNINGS 1//快速排序算法,递归求解#in
2023-06-22

C语言实现快速排序

快速排序不一定是稳定排序,这篇文章主要为大家详细介绍了C语言实现快速排序算法,具有一定的参考价值,感兴趣的同学可以借鉴阅读
2023-05-14

php怎么实现快速排序

快速排序是一种基于分治思想的排序算法,可以用PHP实现如下:function quickSort($arr) {$length = count($arr);if ($length <= 1) {return $arr;}$pivot_ke
php怎么实现快速排序
2024-03-15

SEO如何实现快速排名

这篇文章主要为大家展示了“SEO如何实现快速排名”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SEO如何实现快速排名”这篇文章吧。1:邮箱,可以使用雅虎的替身邮(不知道的百度)跟10分钟邮箱(1
2023-06-10

Excel如何简单快速地实现颜色排序

  当我们在使用Excel工作薄的时候,经常会根据不同的标准来对我们输入的内容进行排序,当然我们也可以根据文字的颜色来排序,那么问题来了,颜色怎么实现排序呢?  本文将会针对这一问题,为大家详细讲解如何通过字体的颜色来对Excel工作薄里内容进行排序,掌握字体的颜色排序方法对我们的工作有一定的帮助。  首先我们先按下图
Excel如何简单快速地实现颜色排序
2024-04-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录