快速排序的幾種優化方式
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 值判斷,否則將導致引擎放棄使用索引而進行全...