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...