快速排序(思路+代码)

变量:

l、r 、privot、temp

思路(递归):

确定一个privot.

两个指针指向两端

左面大的和右面小的交换顺序

注意(一定是从r开始找小于privot的元素)

代码:

import java.util.Arrays;

public class Queue8 {
	public static void main(String[] args) {
		int[] arr = {8, 9, 1, 7, 2, 3, 5, 4, 6, 0};
		sort(arr,0,arr.length-1);
		System.out.print(Arrays.toString(arr));
	}

public static void sort(int[] arrays, int left, int right) {
//		if(left >= right) {
//			return;
//		}
//		int l = left;
//		int r = right;
//		int pivot = arrays[left];
//		int temp = 0;
//		while(l < r) {
//			while(pivot <= arrays[r] && l < r) {
//				r--;
//			}
//			while(pivot >= arrays[l] && l < r) {
//				l++;
//			}
//			if(l <= r) {
//				temp = arrays[r];
//				arrays[r] = arrays[l];
//				arrays[l] = temp;
//			}
//		}
//		arrays[left] = arrays[l];
//		arrays[l] = pivot;
//		sort(arrays, left, l - 1);
//		sort(arrays, l + 1, right);	
		
		if(left > right) {
			return;
		}
		int l = left;
		int r = right;
		int privot = arrays[left];
		int temp = 0;
		while(l < r) {
			while(arrays[r] >= privot && l < r) {
				r--;
			}
			while(arrays[l] <= privot && l < r) {
				l++;
			}
			if(l <= r) {
				temp = arrays[r];
				arrays[r] = arrays[l];
				arrays[l] = temp;
			}
		}
		arrays[left] = arrays[l];
		arrays[l] = privot;
		sort(arrays, left, l - 1);
		sort(arrays, l + 1, right);	
	}
}

猜你喜欢

转载自blog.csdn.net/qq_56127002/article/details/131601999