快速排序

参考自《算法设计与分析基础第3版》p136。中轴元素选最左边的那个,i和j分别从左边和右边向中间扫描。

package cn.edu.nju.zyf.quicksort;

public class QuickSort {
	public static void main(String[] args) {
		int[] arr = {4,65,1,78,65,29,3,9,41,5,7,16,2,3,798,45,0,6,9,45,12,54};
		quickSort(arr,0,arr.length-1);
		for(int i = 0;i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}
	}
	public static void  quickSort(int arr[], int begin, int end) {
		if(begin<0) return;
		if(end < 0) return;
		if(begin>=end) return;
		int i = begin;
		int j = end+1;
		int p = begin;
		while(i<j) {
			i++;
			j--;
			while( arr[i]<=arr[p] && i<end) {
				i++;
			}
			while( arr[j]>arr[p] && j>begin) {
				j--;
			}
			if(i<j) {//如果i和j都停止之后尚未相遇就交换它们指示的数组值
				int temp = arr[j];
				arr[j]  = arr[i];
				arr[i] = temp;
			}
		}
		int temp = arr[p];
		arr[p]  = arr[j];
		arr[j] = temp;
		quickSort(arr, begin, j-1);
		quickSort(arr,j+1,end);
	}
}

完。





--------------------------------------------以下是草稿纸------------------------------------------------

(原来的代码如下)

package cn.edu.nju.zyf.quicksort;

public class QuickSort {
	public static void main(String[] args) {
		int[] arr = {4,65,1,78,65,29,3,9,41,5,7,16,2,3,798,45,0,6,9,45,12,54};
		quickSort(arr,0,arr.length-1);
		for(int i = 0;i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}
	}
	public static void  quickSort(int arr[], int begin, int end) {
		System.out.println("begin="+begin+",end="+end);
		if(begin<0) return;
		if(end < 0) return;
		if(begin>=end) return;
		int i = begin;
		int j = end+1;
		int p = begin;
		while(i<j) {
			i++;
			j--;
			System.out.println("i="+i+",j="+j);
			while( arr[i]<=arr[p] && i<end) {
				i++;
			}
			while( arr[j]>arr[p] && j>begin) {
				j--;
			}
			System.out.println("i="+i+",j="+j);
			if(i<j) {//如果i和j都停止之后尚未相遇就交换它们指示的数组值
				int temp = arr[j];
				arr[j]  = arr[i];
				arr[i] = temp;
			}
			for(int k = 0;k<arr.length;k++) {
				System.out.print(arr[k]+" ");
			}
			System.out.println();
		}
		int temp = arr[p];
		arr[p]  = arr[j];
		arr[j] = temp;
		
		for(int k = 0;k<arr.length;k++) {
			System.out.print(arr[k]+" ");
		}
		System.out.println();
		quickSort(arr, begin, j-1);
		quickSort(arr,j+1,end);
	}
}


(输出如下)
begin=0,end=21
i=1,j=21
i=1,j=16
4 0 1 78 65 29 3 9 41 5 7 16 2 3 798 45 65 6 9 45 12 54 
i=2,j=15
i=3,j=13
4 0 1 3 65 29 3 9 41 5 7 16 2 78 798 45 65 6 9 45 12 54 
i=4,j=12
i=4,j=12
4 0 1 3 2 29 3 9 41 5 7 16 65 78 798 45 65 6 9 45 12 54 
i=5,j=11
i=5,j=6
4 0 1 3 2 3 29 9 41 5 7 16 65 78 798 45 65 6 9 45 12 54 
i=6,j=5
i=6,j=5
4 0 1 3 2 3 29 9 41 5 7 16 65 78 798 45 65 6 9 45 12 54 
3 0 1 3 2 4 29 9 41 5 7 16 65 78 798 45 65 6 9 45 12 54 
begin=0,end=4
i=1,j=4
i=4,j=4
3 0 1 3 2 4 29 9 41 5 7 16 65 78 798 45 65 6 9 45 12 54 
2 0 1 3 3 4 29 9 41 5 7 16 65 78 798 45 65 6 9 45 12 54 
begin=0,end=3
i=1,j=3
i=3,j=2
2 0 1 3 3 4 29 9 41 5 7 16 65 78 798 45 65 6 9 45 12 54 
1 0 2 3 3 4 29 9 41 5 7 16 65 78 798 45 65 6 9 45 12 54 
begin=0,end=1
i=1,j=1
i=1,j=1
1 0 2 3 3 4 29 9 41 5 7 16 65 78 798 45 65 6 9 45 12 54 
0 1 2 3 3 4 29 9 41 5 7 16 65 78 798 45 65 6 9 45 12 54 
begin=0,end=0
begin=2,end=1
begin=3,end=3
begin=5,end=4
begin=6,end=21
i=7,j=21
i=8,j=20
0 1 2 3 3 4 29 9 12 5 7 16 65 78 798 45 65 6 9 45 41 54 
i=9,j=19
i=12,j=18
0 1 2 3 3 4 29 9 12 5 7 16 9 78 798 45 65 6 65 45 41 54 
i=13,j=17
i=13,j=17
0 1 2 3 3 4 29 9 12 5 7 16 9 6 798 45 65 78 65 45 41 54 
i=14,j=16
i=14,j=13
0 1 2 3 3 4 29 9 12 5 7 16 9 6 798 45 65 78 65 45 41 54 
0 1 2 3 3 4 6 9 12 5 7 16 9 29 798 45 65 78 65 45 41 54 
begin=6,end=12
i=7,j=12
i=7,j=9
0 1 2 3 3 4 6 5 12 9 7 16 9 29 798 45 65 78 65 45 41 54 
i=8,j=8
i=8,j=7
0 1 2 3 3 4 6 5 12 9 7 16 9 29 798 45 65 78 65 45 41 54 
0 1 2 3 3 4 5 6 12 9 7 16 9 29 798 45 65 78 65 45 41 54 
begin=6,end=6
begin=8,end=12
i=9,j=12
i=11,j=12
0 1 2 3 3 4 5 6 12 9 7 9 16 29 798 45 65 78 65 45 41 54 
i=12,j=11
i=12,j=11
0 1 2 3 3 4 5 6 12 9 7 9 16 29 798 45 65 78 65 45 41 54 
0 1 2 3 3 4 5 6 9 9 7 12 16 29 798 45 65 78 65 45 41 54 
begin=8,end=10
i=9,j=10
i=10,j=10
0 1 2 3 3 4 5 6 9 9 7 12 16 29 798 45 65 78 65 45 41 54 
0 1 2 3 3 4 5 6 7 9 9 12 16 29 798 45 65 78 65 45 41 54 
begin=8,end=9
i=9,j=9
i=9,j=8
0 1 2 3 3 4 5 6 7 9 9 12 16 29 798 45 65 78 65 45 41 54 
0 1 2 3 3 4 5 6 7 9 9 12 16 29 798 45 65 78 65 45 41 54 
begin=8,end=7
begin=9,end=9
begin=11,end=10
begin=12,end=12
begin=14,end=21
i=15,j=21
i=21,j=21
0 1 2 3 3 4 5 6 7 9 9 12 16 29 798 45 65 78 65 45 41 54 
0 1 2 3 3 4 5 6 7 9 9 12 16 29 54 45 65 78 65 45 41 798 
begin=14,end=20
i=15,j=20
i=16,j=20
0 1 2 3 3 4 5 6 7 9 9 12 16 29 54 45 41 78 65 45 65 798 
i=17,j=19
i=17,j=19
0 1 2 3 3 4 5 6 7 9 9 12 16 29 54 45 41 45 65 78 65 798 
i=18,j=18
i=18,j=17
0 1 2 3 3 4 5 6 7 9 9 12 16 29 54 45 41 45 65 78 65 798 
0 1 2 3 3 4 5 6 7 9 9 12 16 29 45 45 41 54 65 78 65 798 
begin=14,end=16
i=15,j=16
i=16,j=16
0 1 2 3 3 4 5 6 7 9 9 12 16 29 45 45 41 54 65 78 65 798 
0 1 2 3 3 4 5 6 7 9 9 12 16 29 41 45 45 54 65 78 65 798 
begin=14,end=15
i=15,j=15
i=15,j=14
0 1 2 3 3 4 5 6 7 9 9 12 16 29 41 45 45 54 65 78 65 798 
0 1 2 3 3 4 5 6 7 9 9 12 16 29 41 45 45 54 65 78 65 798 
begin=14,end=13
begin=15,end=15
begin=17,end=16
begin=18,end=20
i=19,j=20
i=19,j=20
0 1 2 3 3 4 5 6 7 9 9 12 16 29 41 45 45 54 65 65 78 798 
i=20,j=19
i=20,j=19
0 1 2 3 3 4 5 6 7 9 9 12 16 29 41 45 45 54 65 65 78 798 
0 1 2 3 3 4 5 6 7 9 9 12 16 29 41 45 45 54 65 65 78 798 
begin=18,end=18
begin=20,end=20
begin=22,end=21
0 1 2 3 3 4 5 6 7 9 9 12 16 29 41 45 45 54 65 65 78 798 



今天我要用实力来证明我的弱小

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值