1. 程式人生 > >排序演算法---快速排序c++實現

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

#include<iostream>
using namespace std;

void quicksort(int *list, int s, int t) {	
	
	if(s < t) {
		int i = s, j = t;
		int pivot = list[i]; //樞軸元素

		while(i < j) {
		//從右左掃描
		while(i < j && list[j] >= pivot) {
			j--;
		}
		if(i < j) {
			list[i] = list[j];
			i++;
		}

		//從左往右掃描
		while(i < j && list[i] <= pivot) {
			i++;
		}
		if(i < j) {
			list[j] = list[i];
			j--;
		}
	}
	list[i] = pivot;
	quicksort(list, s, i-1);
	quicksort(list, i+1, t);
	}	
}

int main() {
	int list[10] = {7,3,5,2,1,0,9,2,4,6};
	quicksort(list, 0, 9);
	for(int i = 0; i < 10; i++){
		cout <<list[i] <<" ";
	}
	return 0;
}

相關推薦

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

#include<iostream> using namespace std; void quicksort(int *list, int s, int t) { if(s < t) { int i = s, j = t; int piv

各種排序演算法詳解C++實現

1.氣泡排序 時間複雜度 O ( n

常見排序演算法彙總(C++實現

插入排序 #include<iostream> using namespace std; /* 插入排序的細節講解與複雜度分析 時間複雜度O(N ^ 2),額外空間複雜度O(1) */ void InsertSort(int *arr, int length) { int i,

[排序演算法]--快速排序的Java實現

快速排序 所謂快速排序:基於分治的思想,是氣泡排序的改進型。首先在陣列中選擇一個基準點並把基準點放於序列的開頭(該基準點的選取可能影響快速排序的效率,關於基準點的選擇方法後面再講解),然後分別從陣列的兩端掃描陣列,設兩個指示標誌(lo指向起始位置,hi指

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

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

常見排序演算法整理2(C++實現)

1. 歸併排序時間複雜度:O(nlogn)空間複雜度:O(n)  演算法的基本思想:將每兩個相鄰元素進行歸併,得到新的歸併陣列,每兩個一組再次進行歸併排序,直到所有元素均已排序。  C++實現:void mergehelp(int* A,int left,int mid,in

用JavaScript實現十大經典排序演算法--快速排序

       快速排序,這也是在實際中最常用的一種排序演算法,速度快,效率高。就像名字一樣,快速排序是最優秀的一種排序演算法。 1)演算法原理       快速排序的基本思想:通過一趟排序將待排記錄分

各種排序演算法學習整理 C++實現

感謝網上各位大神的講解,參考了網上多位大神的部落格,做出了這次整理。 排序演算法中用到的函式: void Swap(int* a, int* b) { int tmp = *a;

資料結構和演算法(Golang實現)(25)排序演算法-快速排序

快速排序 快速排序是一種分治策略的排序演算法,是由英國電腦科學家Tony Hoare發明的, 該演算法被髮布在1961年的Communications of the ACM 國際計算機學會月刊。 注:ACM = Association for Computing Machinery,國際計算機學會,世界性的計

java排序演算法快速排序

快速排序 快速排序的思想方法: 1.先從數列中取出一個數作為基準數,記為x。 2.分割槽過程,將不小於x的數全放到它的右邊,不大於x的數全放到它的左邊。(這樣key的位置左邊的沒有大於key的,右邊的沒有小於key的,只需對左右區間排序即可)。 3.再對左右區間重複第二步,直到各區間

小甲魚 排序演算法 快速排序

小甲魚 排序演算法 快速排序   #include <stdio.h> //交換 void swap(int k[], int low, int high) { int temp; temp = k[low]; k[low] = k[high]; k[h

排序演算法快速排序(關鍵詞:資料結構/演算法/排序演算法/快速排序

快速排序 實現 def partition(nums, left, right): middle = (left+right) // 2 pivot = nums[middle] swap(nums, middle, right) # 現在主元 pivot 等於 num

經典排序演算法——快速排序、歸併排序、堆排序

之前兩篇關於排序演算法的綜述以及平方階複雜度的3種具體型別的排序演算法,這一篇將具體介紹其中平均時間複雜度在平方階O(nlog2n)O(nlog_2n)O(nlog2​n)的三個排序演算法,以及各種演算法的程式碼實現(親測正確)。 快速排序 快速排序是由東尼·霍

最常用的排序演算法——快速排序

最常用的排序演算法,當然是快速排序演算法了,下面給出可以直接執行的快速排序演算法思想和程式碼: 思想: ①一般設定第一個數為基準數; ②先從右往左找一個小於基準數的數,在從左往右找一個比基準數大的數,然後交換他們;    繼續,直到兩邊探測變數“相遇”; ③交

排序演算法---快速排序,隨機快速排序和雙路快排(python版)

[原文連結](https://blog.csdn.net/m0_37519490/article/details/80648011) 1、什麼是快速排序演算法? 快速排序是由東尼·霍爾所發展的一種排序演算法,速度快,效率高,也是實際中最常用的一種演算法

經典排序演算法-快速排序(挖坑法、前後指標法)、基數排序

快速排序在實際應用中是比較表現好的排序演算法。快速排序我用兩種方法實現它。 第一種為方法,形象的稱為:挖坑法 基本思路:1、尋找pos位,然後將其分為兩段陣列,然後對這兩段陣列遞迴排序;      

[演算法學習筆記]又一個採用分治法的排序演算法----快速排序演算法

快速排序演算法 快速排序演算法是當前在實際排序應用中最好的選擇,雖然排序演算法最壞情況下的時間複雜度為O(n^2), 但是可以通過隨機化的方式避免最壞情況的發生, 而快速演算法的平均複雜度為O(n lgn), 而且隱含的常數因子非常小, 因此效率十分高.

經典排序演算法——快速排序及其優化

快速排序快速排序的思想:通過一趟排序將資料分割成獨立的兩部分,其中一部分資料都比另一部分的所有資料都要小,然後再按照此方法對這兩部分資料分別進行快速排序,可以遞迴的進行。時間複雜度:好的情況(無序的):O(nlog2n)壞的情況(有序的):O(n^2) 快速排序法不穩定。讓我

常用排序演算法——快速排序

快速排序法是一種高效的排序法,演算法的最終效能取決於選取的中間值,直接實現的快速排序法如下: #include <iostream> #include <algorithm> static int partition( int* array, in

Java-時間複雜度為O(nlogn)的排序演算法(快速排序, 歸併排序, 堆排序, 希爾排序)

/** 包含多種靜態排序方法 * Created by Andre on 2016/6/27. */ public class Sorter { /** * 快速排序 * 遞迴形式 * 第一個記錄為樞軸 * 不穩定