1. 程式人生 > >快速排序(python實現)

快速排序(python實現)

快速排序(Quicksort)是對氣泡排序的一種改進。它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

設要排序的陣列是A[0]……A[N-1],首先任意選取一個數據(通常選用陣列的第一個數)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。

時間複雜度為o(n2)。

#quick sort
def quick_sort(lists, left, right):
    if left >= right:
       return lists
    key = lists[left]
    low = left
    high = right
    while left < right:
        while left < right and lists[right] >= key:
            right -= 1
        lists[left] = lists[right]
        while
left < right and lists[left] <= key: left += 1 lists[right] = lists[left] lists[right] = key quick_sort(lists, low, left - 1) quick_sort(lists, left + 1, high) return lists

相關推薦

快速排序python實現

快速排序(Quicksort)是對氣泡排序的一種改進。它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有

排序算法入門之快速排序java實現

大小 ava 相對 其余 時間 個數 技術分享 算法 元素交換   快速排序也是一種分治的排序算法。快速排序和歸並排序是互補的:歸並排序將數組分成兩個子數組分別排序,並將有序的子數組歸並以將整個數組排序,會需要一個額外的數組;而快速排序的排序方式是當兩個子數組都有序

快速排序C++實現

font std clu temp secure 最重要的 esp 代碼 else 快速排序的基本實現 快速排序算法是一種基於交換的高效的排序算法,它采用了分治法的思想: 1、從數列中取出一個數作為基準數(樞軸,pivot)。 2、將數組進行劃分(partition),將

排序Python實現

int 時間復雜度 pri 開始 堆排序 空間復雜度 繼續 末尾 小頂堆 堆排序(Heap Sort) 堆是一棵具有以下性質的完全二叉樹: 大頂堆:每個結點的值都大於或等於其左右孩子結點的值 小頂堆:每個結點的值都小於或等於其左右孩子結點的值 堆排序的主要思想: 將

快速排序java實現

oid 快速排序 main 優化 尋找 隨機 [] 位置 優化策略 一,算法思想:要實現快速排序,一般策略是先隨意的選取a[left]作為切分的基準元素,通俗來講就是標誌元素,往後循環都和這個標誌元素進行比較。然後我們循環從數組的右端開始往左端循環找尋小於切分元素的元素a[

氣泡排序快速排序java實現

氣泡排序 Bubble Sort 在基於 “交換” 進行排序的方法中,氣泡排序是比較簡單的一種。 /** * 氣泡排序 * 時間複雜度為O(n^2),空間複雜度為O(1) */ public static int[] bubbleSort(int[] array){

快速排序java實現例項

快速排序的核心思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。 下面是java寫的快速排序演算法: public class Searc

選擇排序python實現

選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第一個

基本演算法-》快速排序c++實現

演算法:1 在要排序的無序演算法中,選出一個元素作為標誌。(通常這個標誌選擇陣列中的第一個元素)選完標誌後,先從左向右找出小於標誌的值,將他的值付給陣列中標誌下標的值,然後再從右向左查詢小於標誌的值,然後把小於標誌的值,付給之前大於標誌的下標的值。(就是把小於標誌的值放在標誌

可能是你最容易看明白的快速排序C++實現

我認為現在CSDN大多關於快速排序的程式都是在扯淡。不是針對某一位,我是說,我看到CSDN的C++快排程式都是扯淡。他們根本沒有把重點放在快速排序本身,為什麼我這麼說?我們往下看。快排的本質思想就是分而治之。舉例說明,我們要對3 5 2 1 4進行排序。首先我們選中一個數字當

快速排序quick sortPython實現

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

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("

排序演算法python實現

排序演算法一共有2類:    演算法時間fuzh複雜讀與nlogn比較,大為非線性類,小為線性類;         非線性類比較類排序有:交換排序(冒泡,快速),插入排序(簡單插入,shell),歸併排序(2路歸併,多路歸併),選擇排序(簡單選擇,堆排序);      

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)

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

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

C語言實現快速排序完整版DVE-C++編譯通過

#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLINES 5000  //進行排序的最大文字行 char *lineptr[MAXLINES];  //指向文字行的指標陣列 i

Java實現快速排序快排

快速排序是氣泡排序的改進版,也是最好的一種內排序,在很多面試題中都會出現,也是作為程式設計師必須掌握的一種排序方法。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所

氣泡排序及優化python實現

氣泡排序大家應該都很熟悉,是一個比較交換排序,時間複雜度是O(n2),之前用過java實現過,現在用python來實現一次,還有其優化 總共用了三種實現方式 話不多說,直接上程式碼,比較三種的效能------------------ #! -*- coding:utf-

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

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