快速排序的幾種優化方式

2021-08-20 02:22:21 字數 1716 閱讀 1653

快速排序的幾種優化方式

1.對於基準選取方式的優化:

(1),隨機選取基準的方法:

/*進行第一趟快速排序

* */

public

static

int partion(int array,int low,int high)

if(low >= high)else

while(low < high && array[low] <= tmp)

if(low >= high)else

}array[low] = tmp;

return low;

}/*交換函式

*/public

static

void swap(int array,int start,int end)

public

static

void quick(int array,int start,int end)//對par有麵的元素進行排序

if(par < end-1)

}

(2),三數取基準法

在快排的過程中,每一次我們要取乙個元素作為樞紐值,以這個數字來將序列劃分為兩部分。在此我們採用三數取中法,也就是取左端、中間、右端三個數,然後進行排序,將中間數作為樞紐值。

public static void dealpivot(int a, int left, int right) 

if(a[mid]if(a[right]}

if(a[left]>a[right])

if(a[mid]>a[left])

if(a[right]>a[mid])

}}

2.同元素聚合法

把所有與基準相同的元素放在中間,以減少不必要的找基準次數。

public

static

int focurnum(int array,int start,int end,int par)else}}

int left = parleft;//左面離基準最近的乙個與基準不同的元素的下標

/* * 右邊找

*/for(int j = par+1;j <= end;j++)else}}

int right = parright;//右面離基準最近的乙個與基準不同的元素的下標

int brray = new

int[2];//使用brray陣列把倆個下標儲存起來

brray[0] = left;

brray[1] = right;

return brray;//返回brray陣列

}/*快速排序

*/public

static

void quick(int array,int start,int end)

if(par < end-1)

}

3,資料少的時候,用直接插入法

public

static

void

quick1(int a,int start,int end)else

}a[j+1] = temp;

}return ;

}int par=partion(a, start, end);//先確定第乙個基準

if(par>start+1)

if(par1)

}

快速排序的四種優化方式

本文只講述概念。選用基準值 不在四種優化方式中 選用基準值有三種方式,選用的基準值較好,快速排序的效能也會較好。1.當資料量到達一定大小是,選擇使用插入排序或者堆排序 插入排序 當遞迴之後序列到達某一大小時,相對每個遞迴陣列中的資料元素較少 一般 16時 在使用遞迴顯然會增加遞迴的深度,所以可以選用...

ListView的幾種優化方式

今天在接到千峰的 面試時,有點小激動,不過大腦也發熱,好多東西都想不起來了。畢竟那裡可是大神扎堆的地兒啊,mars 老羅,唉,想想都激動,激動歸激動,當被問的時候就有點小憂傷了,腦袋有點亂了,當問道listview的優化方式時,就有點沒頭緒了,想到啥說啥,好吧,下面就來簡單的說說我用到過的llist...

優化SQL的幾種方式

優化的目的 1 盡量保證索引能正確使用。2 盡量避免全域性搜尋。3 索引不是越多越好。方式 1 對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引 2 應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全...