返回顶部
首页 > 资讯 > 精选 >web如何实现快速排序
  • 609
分享到

web如何实现快速排序

2023-06-27 15:06:21 609人浏览 泡泡鱼
摘要

这篇文章主要为大家展示了“WEB如何实现快速排序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“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如何实现快速排序”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: web如何实现快速排序

本文链接: https://lsjlt.com/news/311463.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • web如何实现快速排序
    这篇文章主要为大家展示了“web如何实现快速排序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web如何实现快速排序”这篇文章吧。快速排序是对冒泡排序的一种改进。它的基本思想是:通过一次排序将要...
    99+
    2023-06-27
  • web开发中如何实现快速排序
    小编给大家分享一下web开发中如何实现快速排序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!快速排序快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序...
    99+
    2023-06-19
  • Python如何实现快速排序
    这篇文章主要介绍“Python如何实现快速排序”,在日常操作中,相信很多人在Python如何实现快速排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何实现快速排序”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-04
  • java中如何实现快速排序
    下面由java入门学习栏目为大家介绍java中如何实现快速排序,希望这种算法排序可以帮助到大家!快速排序的时间复杂度并不固定,如果在最坏情况下(在一个原本逆向排序的数列中选择第一个元素为基准元素)速度比较慢,达到 O(n^2)(和选择排序一...
    99+
    2018-05-13
    java基础 java 快速排序 实现
  • java如何实现快速排序算法
    这篇文章将为大家详细讲解有关java如何实现快速排序算法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。快速排序算法使用的分治法策略来把一个序列分为两个子序列来实现排序的思路:1.从数列中挑出一个元素,称为...
    99+
    2023-06-02
  • C语言如何实现快速排序
    今天小编给大家分享一下C语言如何实现快速排序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。交换排序的思想基本思想:所谓交换,...
    99+
    2023-07-02
  • 快速排序python实现
      快速排序 快速排序的实现同样使用分治法,它的原理是从序列中选择一个值作为基准值,然后分成比基准值小的序列集合和比基准值小的序列集合和与基准值相等的序列集合。 再将比基准值小的序列集合和比基准值小的序列集合再次进行选择基准值分割,最...
    99+
    2023-01-31
    快速 python
  • python实现快速排序
    def sortList(alist):    alen = len(alist)    if alen == 0:        return alist    if alen > 0:        aitem = alist[a...
    99+
    2023-01-31
    快速 python
  • python 快速排序实现
    import random num_list = []for x in range(30):    num_list.append(random.randint(1, 500))list_len = ...
    99+
    2023-06-02
  • JS如何快速排序
    这篇文章主要介绍JS如何快速排序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下说明时间复杂度指的是一个算法执行所耗费的时间空间复杂度指运行完一个程序所需内存的大小稳定指,...
    99+
    2024-04-02
  • Python3实现快速排序、归并排序、堆
    # -*- coding: utf-8 -*- # @Time : 2019-03-26 16:46 # @Author : Jayce Wong # @ProjectName : leetcode # @Fi...
    99+
    2023-01-31
    快速
  • golang归并排序,快速排序,堆排序的实现
    归并排序 归并排序使用经典的分治法(Divide and conquer)策略。分治法会将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得...
    99+
    2024-04-02
  • C语言如何实现快速排序算法
    这篇文章将为大家详细讲解有关C语言如何实现快速排序算法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码#define  _CRT_SECURE_NO_WARNINGS 1/...
    99+
    2023-06-22
  • 如何使用C语言实现快速排序
    本篇内容主要讲解“ 如何使用C语言实现快速排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ 如何使用C语言实现快速排序”吧!快速排序的基本思想是:任取待排序数列中的一个数作为 key 值,通过...
    99+
    2023-07-05
  • C#实现快速排序算法
    快速排序是应用最广泛的排序算法,流行的原因是它实现简单,适用于各种不同情况的输入数据且在一般情况下比其他排序都快得多。 快速排序是原地排序(只需要一个很小的辅助栈),将长度为 N 的...
    99+
    2024-04-02
  • C语言实现快速排序
    目录1. hoare法方法与步骤代码实现2. 挖坑法方法与步骤代码实现3. 前后指针法方法与步骤代码实现4. 快速排序的缺点与优化1.快速排序的缺点2.快速排序的优化① 三数取中法选...
    99+
    2023-05-14
    C语言快速排序算法 C语言快速排序 C语言排序算法
  • php怎么实现快速排序
    快速排序是一种基于分治思想的排序算法,可以用PHP实现如下: function quickSort($arr) { $len...
    99+
    2024-03-15
    php
  • SEO如何实现快速排名
    这篇文章主要为大家展示了“SEO如何实现快速排名”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SEO如何实现快速排名”这篇文章吧。邮箱,可以使用雅虎的替身邮(不知道的百度)跟10分钟邮箱(10m...
    99+
    2023-06-10
  • 如何使用快速排序
    这篇文章主要介绍“如何使用快速排序”,在日常操作中,相信很多人在如何使用快速排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用快速排序”的疑惑有所帮助!接下来,请跟着...
    99+
    2024-04-02
  • Java的堆排序、快速排序、归并排序怎么实现
    本文小编为大家详细介绍“Java的堆排序、快速排序、归并排序怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java的堆排序、快速排序、归并排序怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。堆排序...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作