java快速排序算法

快速排序算法写法很多种,这里介绍一种简单的:

//递归方式实现快速排序
//算法思想每次排序会把小于锚点的数放在左边,大于锚点的数放在右边,
//排完一轮就找到了锚点的正确位置,然后递归对锚点左侧,和右侧的数组
//进行相同的规则排序
public static void quicksort(int[] array, int start, int end) {
		int leftPos = start;
		int rightPos = end;
        //取最后一个数作为锚点
		int data = array[end];
        //一次排序的运行条件
		while (leftPos < rightPos) {
            //从右侧开始,因为要从大到小排序,所以应该是右侧大于锚点的数是符合规则的,指针一直向左侧移动
			while (leftPos < rightPos && array[rightPos] > data) {
				rightPos--;
			}

			if (array[leftPos] > data) {
				int temp = array[leftPos];
				array[leftPos] = array[rightPos];
				array[rightPos] = temp;
			}

			while (leftPos < rightPos && array[leftPos] < data) {
				leftPos++;
			}
			if (array[rightPos] < data) {
				int temp = array[leftPos];
				array[leftPos] = array[rightPos];
				array[rightPos] = temp;
			}
		}

		if (leftPos > start) {
			quicksort(array, start, leftPos - 1);
		}

		if (rightPos < end) {
			quicksort(array, rightPos + 1, end);
		}
	}
public static void main(String[] args) {
		int[] array = { 9, 1, 3, 7, 2, 4, 6, 110, 22, 5 };
		
		// sort1(array);
		// sort2(array);
		// sort3(array);
		quicksort(array, 0, array.length - 1);

		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
		
	}

1
2
3
4
5
6
7
9
22
110

你可能感兴趣的:(简单算法,java面试小问题)