美文网首页
多语言实现快速排序算法

多语言实现快速排序算法

作者: 过往云技 | 来源:发表于2019-01-15 18:02 被阅读0次

快速排序:

image

快速排序采用“分而治之、各个击破”的观念,此为原地(In-place)分割版本。

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。

步骤为:

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

递归到最底部时,数列的大小是零或一,也就是已经排序好了。这个算法一定会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

PHP 实现:

function quickSort(array $array):array
{
    $count = count($array);
    if($count < 2){
        return $array;
    }

    $leftArray = $rightArray = [];
    $indexValue = $array[0];
    for ($i=1; $i < $count; $i++) { 
        if($array[$i] < $indexValue){
            $leftArray[] = $array[$i];
        } else {
            $rightArray[] = $array[$i];
        }
    }

    $leftArray = quickSort($leftArray);
    $rightArray = quickSort($rightArray);

    return array_merge($leftArray, [$indexValue], $rightArray);
}

var_export(quickSort([42323, 34, 45, 24, 45]));

Python 实现:

def quick_sort(array, l=0, r=False):
    length = len(array)
    left = l or 0
    right = r or length - 1

    if left < right:
        pivot = partition(array, left, right)
        quick_sort(array, left, pivot-1)
        quick_sort(array, pivot + 1, right)

    return array


def partition(array, left, right):
    right_value = array[right]
    i = left
    index = left
    while i < right:
        if array[i] < right_value:
            swap(array, i, index)
            index = index + 1
        i = i + 1

    swap(array, right, index)

    return index


def swap(array, i, j):
    array[i], array[j] = array[j], array[i]


a = quick_sort([2, 12, 32, 15, 34, 1, 0, 352, 32])
print(a)

JavaScript 实现:

unction quickSort(array, l, r){  
  var len = array.length;
  var left = l || 0;
  var right = r || len - 1;
  
  if(left < right){
    pivotIndex = partition(array, left, right);
    quickSort(array, left, pivotIndex - 1);
    quickSort(array, pivotIndex + 1, right);
  }
 
  return array;
}

function partition(array, left, right){
  const value = array[right]
  var pivotIndex = left;
  for(var i = left; i < right; i++){
    if(array[i] < value){
      swap(array, i, pivotIndex);
      pivotIndex++;
    }
  }
  
  swap(array, right, pivotIndex);
  
  return pivotIndex;
}

function swap(array, i, j){
  const temp = array[i]
  array[i] = array[j]
  array[j] = temp
}

<<------------------------------------------------------->>
function quickSort2(array){
  var len = array.length
  if(len < 2){
    return array;   
  }
  
  var left = [], right = [];
  var value = array[0]
  
  for(var i = 1; i < len; i++){
    if(array[i] < value){
      left.push(array[i])
    } else {
      right.push(array[i])
    }
  }
  
  left = quickSort2(left);
  right = quickSort2(right);
  
  return left.concat([value], right)
}

console.log(quickSort([21, 23, 3, 2, 34, 3, 45, 1, 0]))
console.log(quickSort2([21, 23, 3, 2, 34, 3, 45, 1, 0]))

相关文章

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • 手撕代码 之 快速排序

    1.实现快速排序算法 问题描述给定一个无序数组int[ ] a,使用快速排序算法进行排序。 解题思路对于快速排序,...

  • 三大排序算法

    归并排序[稳定的排序算法] 递归实现 非递归实现 快速排序[不稳定的排序算法] 堆排序[不稳定的排序算法]

  • 快速排序

    手写java版快速排序算法实现

  • 基础算法|快速排序

    快速排序(Quicksort),是对冒泡排序算法的一种改进。 快速排序算法通过多次比较和交换来实现排序,其排序流程...

  • 快速排序&快速排序与归并排序的对比

    快速排序算法 快速排序算法是从上到下解决问题使用递归实现,通过巧妙的方式,实现原地排序 分析时间复杂度O(nlog...

  • 数据结构02-高效排序算法

    第二章 高效排序算法 第二章 高效排序算法一、快速排序基本思想快速排序图示一次划分C 语言实现Java 语言实现算...

  • 多语言实现快速排序算法

    快速排序: 快速排序采用“分而治之、各个击破”的观念,此为原地(In-place)分割版本。 快速排序使用分治法(...

  • python 排序算法

    文章概述 介绍各大常用经典的排序算法和效率,以及python实现常用算法(冒泡排序,选择排序,快速排序,插入排序)...

网友评论

      本文标题:多语言实现快速排序算法

      本文链接:https://www.haomeiwen.com/subject/fmrxdqtx.html