基礎問題 快速排序 歸併排序

2021-06-18 10:07:04 字數 1294 閱讀 3855

1. 快速排序:

快速排序是c.r.a.hoare於2023年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法(divide-and-conquermethod)。

該方法的基本思想是:

1.先從數列中取出乙個數作為基準數

2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊

3.再對左右區間重複第二步,直到各區間只有乙個數。

**如下:

typedef struct item * ptritem, * ptrlist;

void exch( item &a, item &b )

// 每次交換樞軸值 和 需要交換的元素。

int partition( ptrlist a, int i, int j )

return i;

}// 樞軸值只需要最後放在需要的位置上.

int partition2( ptrlist a, int i, int j )

// 退出的可能性只可能是 i == j

a[ i ] = pivot;

return i;
}

在 partitona2中,在 a[ i ] = a[ j ] 之後,不用進行 i ++ 的操作,因為此時 a[i].key( 原來a[j].key ) 一定會小於 key。

quick_sort( a, i, j )

2. 歸併排序的遞迴 和 非遞迴演算法

非遞迴演算法:

依次將陣列a中長度為1, 2, 4, 8, ..., 2^m( 2^for( step = 1; step < a.length; step += step ) }

merge( a, i, m, j ): 合併a [i ... m] 、a[m+1 ... j] 到 a[i ... j]。

遞迴演算法:

mergesort( a, int s, int t ){

if( s==t ) return;

m = (s+t)/2;

mergesort(a, s, m); mergesrot(a, m+1, t);

merge( a, s, m, t );

快速排序 歸併排序

感覺好久之前不寫這些基礎的東西忽然覺著,想複習一下,就簡單溫習一下排序的例子 package com.ruishenh.algoritmic public class sort static void printmsg int arrs system.out.println static int g...

快速排序,歸併排序

快速排序 quicksort 是對 氣泡排序的一種改進。設要排序的 陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。需要注意的是,多個相同的值的相對位置也許會在演算法結束時產...

歸併排序,快速排序

快速排序實現 filename fastsort description author hcq createtime 2019 04 12 10 01 public class fastsort arrays.stream arr foreach v system.out.println 排序後 s...