黑马程序员技术交流社区
标题:
java种基本排序一(分两次发。一次发不了。太长了)
[打印本页]
作者:
张综
时间:
2012-11-11 22:16
标题:
java种基本排序一(分两次发。一次发不了。太长了)
public static void quickSort(int [] arr,int low, int high)
{
int pivot;
if (low < high)
{
pivot = getCurrent(arr,low,high);
quickSort(arr,low,pivot-1);
quickSort(arr,pivot+1,high);
}
}
/**
快排的划分
做法
第一步:(初始化)设置两个指针i和j,它们的初值分别为区间的下界和上界,即i=low,i=high;
选取无序区的第一个记录R[i](即R[low])作为基准记录,并将它保存在变量pivot中;
第二步:令j自high起向左扫描,直到找到第1个关键字小于pivot.key的记录R[j],
将R[j])移至i所指的位置上,这相当于R[j]和基准R[i](即pivot)进行了交换,
使关键字小于基准关键字pivot.key的记录移到了基准的左边,交换后R[j]中相当于是pivot;
然后,令i指针自i+1位置开始向右扫描,直至找到第1个关键字大于pivot.key的记录R[i],
将R[i]移到i所指的位置上,这相当于交换了R[i]和基准R[j],使关键字大于基准关键字的记录移到了基准的右边,
交换后R[i]中又相当于存放了pivot;接着令指针j自位置j-1开始向左扫描,如此交替改变扫描方向,
从两端各自往中间靠拢,直至i=j时,i便是基准pivot最终的位置,将pivot放在此位置上就完成了一次划分。
*/
public static int getCurrent(int [] arr, int low, int high)
{
int pivot = arr[low];
while (low < high )
{
while (low<high && arr[high] >= pivot)
{
high--;
}
if (low < high)
{
arr[low++] = arr[high];
}
while (low < high && arr[low] <= pivot)
{
low ++;
}
if (low < high)
{
arr[high--] = arr[low];
}
}
//arr[low] = pivot;
arr[high] = pivot;
return low;
}
/**
完成数组的打印功能
*/
public static void printArray(int [] arr)
{
System.out.print("[");
for(int i=0; i<arr.length; i++)
{
if( i != arr.length-1 )
{
System.out.print(arr[i]+", ");
}
else
{
System.out.println(arr[i]+"]");
}
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2