package com.fz.song;
/**
* Created by sfz on 2017/9/5.
*/
public class quick {
public static void main(String[] args) {
//定义一个数组,不要有重复数据
int[] arr = {11, 20, 5, 16, 15, 35, 30, 45};
//开始下标
int start = 0;
//结束下标
int end = arr.length - 1;
//开始排序
quicksort(arr, start, end);
//打印结果
soutarr(arr);
}
/**
* 快速排序
*
* @param arrs:数组
* @param start:开始下标
* @param end:结束下标
*/
public static void quicksort(int[] arrs, int start, int end) {
//把开始下标的值给left指针
int left = start;
//把结束下标的值给rigth指针
int right = end;
//定义一个缓存数据的变量
int temp = 0;
//限制lief,不能大于right
if (left <= right) {
//获取最左边第一个数据给遍历存起来
temp = arrs[left];
//开始循环
while (left != right) {
//开始从右边向左边找,直到找到一个小于temp的值,就记录下标
while (right > left && arrs[right] > temp) {
right--;
}
//把riht的值给left
arrs[left] = arrs[right];
//从左边向右边查找,直到找到一个大于temp的值,记录下标,把这个值赋给下标为rigth,
while (left < right && arrs[left] < temp) {
left++;
}
arrs[right] = arrs[left];
}
//把缓存的数据布给那个空的数据
arrs[right] = temp;
//从此,左边的数据比temp小,有变的比他大
//递归调用一下.
quicksort(arrs, start, left - 1);
quicksort(arrs, right + 1, end);
}
}
public static void soutarr(int[] arr) {
for (int a : arr) {
System.out.print(a + " ");
}
System.out.println();
}
}