排序分类
冒泡排序
选择排序.
选择排序
Array 源码中用到的排序算法
1.什么叫快速排序
快速排序,假设排序的数组为array[0…n-1],首先任意选取一个数据(通常选用array[0])作为基准数据.将所有比它小的数据放到它的前面,所有比它大的数据放到它后面.从而确定该数据在排序后的位置.将上述过程称为一趟快速排序.然后读前后两个区间递归调用此过程.
这里的难点在于,如何实现将比基准数据小的数据放到前面,比基准数据大的数放在后面.
具体逻辑如此.首先从后往前看,假如碰到比基准数据小的数,则两者替换(此时基准数据后面的数都比它大),
代码示例如下
public static void quickSort(int[] array,int low,int high)
{
if(low>=high) return;
int index=oneSort(array,low,high);
quickSort(array,0,index-1);
quickSort(array,index+1,high);
}
/**
* 一趟排序,返回base基准值的下标
* @param array
* @param low
* @param high
* @return
*/
private static int oneSort(int[] array, int low, int high) {
//定义活动下标,当两者相等时即确定了基准值得下标
int i=low,j=high;
int base=array[i];
while(i<j)
{
//首先从后往前找,比基准值小的元素
while(array[j]>base)
{
j--;
}
//找到比基准值小的元素,两者进行替换
if(array[j]<base)
{
base=array[j];
array[j]=array[i];
array[i]=base;
}
//从前往后找,找比基准值大的元素
while(array[i]>base)
{
i++;
}
//找到比基准值小的数,两者进行替换
if(array[i]<base)
{
base=array[i];
array[i]=array[j];
array[j]=base;
}
}
return i;
}
对于一趟排序,这里使用了两个下标i,j.其对应的排序前的第一个下标,与最后一个下标.之后在代码运用这两个下标,将基准值与所有值进行了比较.从而确定了基准数据的下标并返回.
快速排序详解
31万+

被折叠的 条评论
为什么被折叠?



