快速排序
来源:互联网 发布:电脑课本软件 编辑:程序博客网 时间:2024/06/05 14:25
/**
* 快速排序
* @author qian
*基于划分的方法
*划分的思想是:以priot为枢纽,将待排序的数组划分为两组,左边的一组元素小于枢纽,右边的一组元素大于枢纽
*划分的做法为:左边扫描到比枢纽大的就停下来,右边扫描到比枢纽小的也停下来(一般选择数组最右边的元素为枢纽),然后交换位置,直到左边指针与右边指针重合
*快速排序就是先把数组划分,再对左右两边的数组递归调用自身
*/
public class QuickSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {23,89,5,7,12,20,50,33,48,56};
quickSort(array,0,9);
System.out.println("排序后的数组为:");
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
public static void quickSort(int[] a,int left,int right){
if(right-left<=0)
return ;
else{
int priot = a[right];
int partition = partitionSort(a,left,right,priot);
quickSort(a,left,partition-1);
quickSort(a,partition+1,right);
}
}
public static int partitionSort(int[] a,int left,int right,int priot){
int leftPos = left - 1;
int rightPos = right +1;
while(true){
while(leftPos<right&&a[++leftPos]<priot);
while(rightPos>left&&a[--rightPos]>priot);
if(leftPos>=rightPos)
break;
else
swap(a,leftPos,rightPos);
}
swap(a,leftPos,right);
return leftPos;
}
private static void swap(int[] a, int leftPos, int rightPos) {
int temp = a[leftPos];
a[leftPos] = a[rightPos];
a[rightPos] = temp;
}
}
* 快速排序
* @author qian
*基于划分的方法
*划分的思想是:以priot为枢纽,将待排序的数组划分为两组,左边的一组元素小于枢纽,右边的一组元素大于枢纽
*划分的做法为:左边扫描到比枢纽大的就停下来,右边扫描到比枢纽小的也停下来(一般选择数组最右边的元素为枢纽),然后交换位置,直到左边指针与右边指针重合
*快速排序就是先把数组划分,再对左右两边的数组递归调用自身
*/
public class QuickSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {23,89,5,7,12,20,50,33,48,56};
quickSort(array,0,9);
System.out.println("排序后的数组为:");
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
public static void quickSort(int[] a,int left,int right){
if(right-left<=0)
return ;
else{
int priot = a[right];
int partition = partitionSort(a,left,right,priot);
quickSort(a,left,partition-1);
quickSort(a,partition+1,right);
}
}
public static int partitionSort(int[] a,int left,int right,int priot){
int leftPos = left - 1;
int rightPos = right +1;
while(true){
while(leftPos<right&&a[++leftPos]<priot);
while(rightPos>left&&a[--rightPos]>priot);
if(leftPos>=rightPos)
break;
else
swap(a,leftPos,rightPos);
}
swap(a,leftPos,right);
return leftPos;
}
private static void swap(int[] a, int leftPos, int rightPos) {
int temp = a[leftPos];
a[leftPos] = a[rightPos];
a[rightPos] = temp;
}
}
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 分享秦刚老师推荐的《降级论》(罗浩原著),讲了如何跨界
- next_permutation函数
- PAT-A1036 Boys vs Girls(25) (模拟)
- Codeforces Round #259 (Div. 2) A. Little Pony and Crystal Mine
- HDOJ-2052(Picture)
- 快速排序
- [GDKOI2016]QT与泰剧
- 转行自学android,Day9-彻底蒙圈
- 浑浑噩噩
- 【JAVA】25、应用1——数组排列
- PAT-A1031 Hello World for U (20)(模拟)
- http中post 和 get 请求方法区别
- MySQLl导入数据出现--unknown command '\'
- Codeforces Round #259 (Div. 2) B. Little Pony and Sort by Shift