Sort排序和冒泡法的异同
对数组a{2,4,3,6,2,8,1}进行排序。
快速排序法
原理:
对于数组a{2,4,3,6,2,8,1}
① 需要选取一个关键元素作为基准元素key,用数组内所有元素跟基准元素比较大小
② 先假设数组内第一个元素的角标为i,最后一个元素角标为j
③ 先将数组元素最后一个元素跟基准元素比较,若a[j]>key,则j--,直到a[j]<key,然后进行交换,大的放后面,小的放前面。接着进行第④步;
④ 将数组元素第一个元素与基准元素比较,所a[i]<key,则i++,直到a[i]>key,然后进行交换。
⑤ 重复③④步,直到i==j,第一趟比较结束。(第一趟比较结束时,基准元素key一般在数组元素的中间位置,然后以基准元素key为中轴,将数组划分为两个子数组,key左边的子数组都小于key,右边的子数组都大于key.)
注:若key为数组元素的最小值,第一趟比较结束时,只比较key右边的子数组,再重新选子数组的基准元素key1,然后进行比较。
若数组为空时,则输出一个空的序列。
若数组不合法时,也输出空序列。
关键点:1.找基准元素;
通常选取数组内第一个元素为基准元素;
2. 设第一个元素角标为i;
设最后一个元素角标为j;
3.先由后往前跟基准元素比较,在右前往后比较;
4.划分子数组。
关于代码:
代码一:
package shuzu;
public classQuickSort {
public voidsort(int[] arras,intlow,inthigh) {
int i=low;
int j=high;
if(i>j){
/*使用了快速排序
arras:要排序的数组
low:数组的开始下标
high:数组的末尾下标
*/
return;
}
int key=arras[low]; //选基准元素(一般都数组内第一个元素)
while(true){ //让一趟里面全部元素比较完毕
while(j>i){ //由j角标开始往前比较
if(arras[j]<key){ //交换