1. 程式人生 > >快速排序(quick sort)的Python實現

快速排序(quick sort)的Python實現

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/8/11 12:59 AM
# @Author  : Blake

import random

def quick_sort(array):

    print('every list: ', array)
    if len(array) < 2:
        return array

    else:
        pivot = array[0]
        less = [i for i in array[1:] if i < pivot]
        greater = [i for i in array[1:] if i > pivot]

        return quick_sort(less) + [pivot] + quick_sort(greater)

array = list(range(10))
random.shuffle(array)
print(quick_sort(array))

global count
count = 0
def quick_resort(a, b):

    global count
    if a > b:
        x = a % b
        if x == 0:
            return b, count

        count += 1
        print(x, b)
        return quick_resort(x, b)

    if a < b:
        x = b % a
        if x == 0:
            return a, count

        count += 1
        print(a, x)
        return quick_resort(a, x)

print('-' * 30)

numbers = []
for i in range(2):
    numbers.append(random.randint(0, 1000000))
a, b = numbers[0], numbers[1]
print('原始模型 ', a, b)
print('最小切分數,切分次數:', (quick_resort(a, b)))

every list:  [0, 7, 8, 5, 6, 4, 2, 3, 1, 9]
every list:  []
every list:  [7, 8, 5, 6, 4, 2, 3, 1, 9]
every list:  [5, 6, 4, 2, 3, 1]
every list:  [4, 2, 3, 1]
every list:  [2, 3, 1]
every list:  [1]
every list:  [3]
every list:  []
every list:  [6]
every list:  [8, 9]
every list:  []
every list:  [9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
------------------------------
原始模型  191541 164789
26752 164789
26752 4277
1090 4277
1090 1007
83 1007
83 11
6 11
6 5
1 5
最小切分數,切分次數: (1, 9)
 

相關推薦

快速排序quick sortPython實現

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/8/11 12:59 AM # @Author : Blake import random def quick_sort(array):

PHP實現排序演算法----快速排序Quick Sort、快排

基本思想: 快速排序(Quicksort)是對氣泡排序的一種改進。他的基本思想是:通過一趟排序將待排記錄分割成獨立的兩部分,其中一部分的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄繼續進行快速排序,整個排序過程可以遞迴進行,以達到整個序列有序的目的

js實現冒泡排序bubble sort快速排序quick sort歸並排序merge sort

mergesort dep lse small sort code n) ble 排序效率 排序問題相信大家都比較熟悉了。用js簡單寫了一下幾種常用的排序實現。其中使用了es6的一些語法,並且不僅限於數字——支持各種類型的數據的排序。那麽直接上代碼: function co

快速排序Quick Sort

sin aik tex 狀態 整體 splay 好的 優化 return 基本思想:   通過一趟排序將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對著兩部分記錄進行排序,以達到整體有序的目的。 通俗點說就是:   在待排記錄中

排序演算法(六):快速排序Quick Sort

基本思想: 1)選擇一個基準元素,通常選擇第一個元素或者最後一個元素, 2)通過一趟排序講待排序的記錄分割成獨立的兩部分,其中一部分記錄的元素值均比基準元素值小。另一部分記錄的 元素值比基準值大。 3)此時基準元素在其排好序後的正確位置 4)然後分別對這兩部分記錄用同樣

C標準庫中的快速排序quick-sort函式 [簡單應用]

#include <iostream> #include <cstdlib> using namespace std; const size_t INDEX_ZERO = 0; int com(const void *a,const void *

006.交換排序快速排序Quick Sort

基本思想:1)選擇一個基準元素,通常選擇第一個元素或者最後一個元素,2)通過一趟排序講待排序的記錄分割成獨立的兩部分,其中一部分記錄的元素值均比基準元素值小。另一部分記錄的 元素值比基準值大。3)此時基準元素在其排好序後的正確位置4)然後分別對這兩部分記錄用同樣的方法繼續進行

排序 heap sort C# 實現

main 函式中呼叫:            var data = new int[] {5,7,6,4,1,9,3};             heapSort(data);

歸併排序Merging Sort- java實現

學習自嚴蔚敏、吳偉民的《資料結構》-清華大學出版 歸併排序(Merging Sort)是又一類不同的排序方法。“歸併”的含義是將兩個或兩個以上的有序表組合成一個新的有序表。 利用歸併的思想容易實現排序。假設初始化序列含有n個記錄,則可以看成是n個有序的子序列,每個子序列的長度為1,然後兩兩歸

排序Heap Sort- java實現

學習自嚴蔚敏、吳偉民的《資料結構》-清華大學出版 過於複雜,理解的不夠透徹,只存放程式碼部分 1、建立堆: /** * 由於使得陣列元素遞增排序,所以先建一個“大頂堆”,即先選得一個關鍵字為最大的記錄並與序列中最後一個記錄交換 * 所以,每次訪問陣列會是n-i * @param a

起泡/氣泡排序Bubble Sort- java實現

過程很簡單,首先將第一個元素與第二個元素進行比較,若第一個元素比第二個元素大,則進行交換,然後比較第二個元素與第三個元素。依次類推,直至第n-1與第n個元素比較完,這樣最大的元素會被交換到最後一個位置。上述過程為一趟排序,然後進行第二趟排序,直到第n-1個元素... 一般需

合併排序Merge SortC 實現簡單效能測試

#include <time.h> #include <stdlib.h> #include <stdio.h> #define sential RAND_MAX  /* 定義哨兵*/ #define SIZE 1000000/

快速排序quick sort)

前面兩個小節,我們分別介紹了氣泡排序,插入排序,在我們本節講解一種更加高效的排序方法,快速排序,也即是常說的快排。 1、演算法思想 實際上,快排是對氣泡排序的一種改進,採用分而治之的思想。 在待排序表 A[1,2…n]中選取一個基準值pivot(通常選取序列首元素); 通過一趟排序操

C語言實現快速排序遞迴

#include<stdio.h> void Split(int left,int a[],int right); int Quicksort(int left,int a[],int right); int main() { int N; scanf("

PHP實現排序演算法----希爾排序Shell Sort

基本思想: 希爾排序是指記錄按下標的一定增量分組,對每一組使用 直接插入排序 ,隨著增量逐漸減少,每組包含的關鍵字越來越多,當增量減少至 1 時,整個序列恰好被分成一組,演算法便終止。 操作步驟: 先取一個小於 n(序列記錄個數) 的整數 d1 作為第一個

歸併排序Merge Sort遞迴、非遞迴 Java實現

歸併排序與堆排序充分利用了完全二叉樹的深度為logn + 1的特性,因而效率比較高。 歸併排序(Merge Sort) 歸併排序(Merge Sort)就是利用歸併的思想表現的排序方法。 它的原理是假設初始序列含有n個記錄,則可以看成是n個有序的子序列,每個子序列的長度

圖解排序演算法及實現——希爾排序 Shell Sort

希爾排序(ShellSort)也稱增量遞減排序演算法,即跨多步版的InsertionSort,是InsertionSort基礎上的改進版。InsertionSort可以看作ShellSort中gap=1的特例。希爾排序是非穩定排序演算法。 希爾排序通過將全部元

希爾排序Shell Sort——插入排序Java實現

希爾排序法(Shell Sort)屬於插入類排序,又稱為縮小增量排序。它對直接插入排序有了很大的改進,是直接插入排序的增強版。 希爾排序的基本思想是: 把線性表按步長gap分組,共有gap個組。 每

Java實現快速排序分治法

<span style="font-size:18px;">package com.alibaba; public class QuickSortTest { public stati

java實現各種排序演算法(包括氣泡排序,選擇排序,插入排序快速排序簡潔版)及效能測試

1、氣泡排序是排序裡面最簡單的了,但效能也最差,數量小的時候還可以,數量一多,是非常慢的。      它的時間複雜度是O(n*n),空間複雜度是O(1)      程式碼如下,很好理解。 public static void bubbleSort(int[] arr)