1. 程式人生 > >GO語言quicksort實現.快速排序法程式碼實現

GO語言quicksort實現.快速排序法程式碼實現

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	var z []int
	for i := 0; i < 1000000; i++ {
		z = append(z, rand.Intn(100000))
	}
	sort(z)
}
func sort(list []int) {
	if len(list) <= 1 {
		return//退出條件
	}
	i, j := 0, len(list)-1
	index := 1 //表示第一次比較的索引位置.
	key := list[0] //第一次比較的參考值.這裡選擇第一個數
	if list[index] > key {
		list[i], list[j] = list[j], list[i]
		j-- //表示取大值跟末尾的數替換位置,使大於參考值的數在後面
	} else {
		list[i], list[index] = list[index], list[i]
		i++ //表示取小的值跟前面的替換位置,使小於參考值的數在前面
		index++ 
	}
	sort(list[:i]) //處理參考值前面的陣列
	sort(list[i+1:]) //處理參考值後面的陣列
}

相關推薦

GO語言quicksort實現.快速排序程式碼實現

package main import ( "fmt" "math/rand" "time" ) func main() { var z []int for i := 0; i <

演算法 -- Java實現快速排序(圖解 + 程式碼實現)

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

C語言實現快速排序(分治法)

下一個 enter hang partition 等於 就是 tor log markdown title: 快速排序法(quick sort) tags: 分治法(divide and conquer method) grammar_cjkRuby: true ---

快速排序程式碼實現(python3版)及其時間空間複雜度分析

快速排序是對氣泡排序的一種改進。基本思想是:通過一躺排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按次方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。最壞情況的時間複雜度為O(n2),最好情況時間複雜度

go語言寫的快速排序

因為工作原因接觸了go語言,由於其特性,並行程式設計非常方便。而go語言特有的入門級的特性最主要的就包括了用go開協程,用channel進行同步。 用這些入門級特性寫了一個多執行緒版本的快速排序是一個非常好的練習。 package main import ( "fmt" "sync"

php四種基礎演算法:冒泡,選擇,插入和快速排序 程式碼練習

function maopao($arr,$len) { for($i=1;$i<$len;$i++) { for($j=0;$j<$len-$i;$j++) { if($arr[$j]>$arr[$j+1])

Java 實現快速排序對陣列進行排序

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

快速排序 Java實現

   快速排序法又叫二分法排序: import java.util.Random; public class Quicksort { public static void main(String

快速排序-Java實現

public static void quickSort(int[] a, int left, int right) { int f, t; int rtemp, ltemp; ltemp = left; rtemp = right; f = a[(left + right)

C語言入門:插入排序程式碼實現,而不是排序方法闡述)

適用於理解排序方法思路而不清楚程式碼如何實現的C語言入門者 簡易流程圖: //插入排序,這裡以6個數的排序為例 #include <stdio.h> int main (void) { int a[6],i,j,mid,k; p

快速排序演算法程式碼實現

1 演算法介紹 快速排序是一個“交換類”的排序,以軍訓排隊為例,教官說:“第一個同學出列,其他人以他為中心,比他矮的全排到他的左邊,比他高的全排他右邊。”這就是一趟快速排序。可以看出,一趟快速排序是以一個“樞軸”為中心,將序列分成兩部分,樞軸的一邊全是比它小(

演算法 -- Java實現氣泡排序(圖解 + 程式碼實現)

排序思想: 相鄰元素兩兩比較,大的往後放,第一次完畢,最大值出現在了最大索引處(每比較完一趟,就選出一個最大值放到了後面),同理繼續可以得到一個排好序的陣列 排序圖解: 排序規

Java常用的八種排序演算法與程式碼實現(二):歸併排序快速排序

注:這裡給出的程式碼方案都是通過遞迴完成的 --- 歸併排序(Merge Sort):   分而治之,遞迴實現   如果需要排序一個數組,我們先把陣列從中間分成前後兩部分,然後對前後兩部分進行分別排序,再將排好序的數組合並在一起,這樣整個陣列就有序了   歸併排序是穩定的排序演算法,時間

go語言實現快速排序

快速排序作為分治法的經典演算法,原理自不必多說,我只是用go語言直接實現了,當然可以不用中間切片,但是這種寫法最能體現快速排序的分治思想。 package main import "fmt" // 快速排序(直接)

Java程式碼實現快速排序(QuickSort)

Java程式碼實現快速排序(QuickSort) 核心思想 如果要排序陣列中下標從p到r之間的一組資料,我們選擇p到r之間的任意一個數據為pivot(分割槽點)。 我們遍歷p到r之間的資料,將小於pivot的放到左邊,將大於pivot的放到右邊,將pivot放到中間。經過這一

排序入門之快速排序(java實現

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

——python實現快速排序(二分思想)

append exc microsoft 部分 input temp style 數字 快速排序 實現思路   將所需要的數字存入一個列表中 首先,設置將最左側的那個數設置為基準數,在列表中索引為0 然後設置兩個移動位(用於比較),分別為最左邊和最右邊 然後最右邊那位向左

python 三行程式碼實現快速排序

python 三行程式碼實現快速排序 最近在看 python cookbook , 裡面的例子很精彩,這裡就幫過來,做個備忘錄 主要利用了行數的遞迴呼叫和Python的切片特性,解釋一下每行程式碼的含義: 第1行: #coding:utf-8 指定utf

(排序演算法)linux c語言實現快速排序(氣泡排序的改進版)

 快速排序演算法是對氣泡排序演算法的一種改進,氣泡排序是對單個元素的升降,快速排序是對所有元素的升降,不過這個升降是取了某一個標準的前提下,在本文程式碼中,就以a[i],其實就是以最左邊的元素為參考,比較交換之後,將這個參考元素放到分界的地方,即i的位置。 程式碼如下,裡面有比較詳細的

C語言筆記17--快速排序簡單實現

快速排序(QuickSort)是一種排序演算法,並且非常的實用。快速排序的原理是先找一個基準值,然後和序列的每個值比較,大於基準值的放在基準值右邊,小於基準值的放在左邊。那麼陣列將會被分割成兩組,左邊的是小於基準值的,右邊是大於基準值的,那就是說基準值的位置已經確定。然後分別為這兩組找基準值進行分割