#快速排序
1.假设有一个数组,定义一个标准值;
2.标准值左边的值都比标准值小;
3.标准值右边都比标准值大;
4.一个无序数组,先从左边开始遍历,当遇到比标准值***大或等于***的时候停止;
5.然后开始从右边开始遍历,当遇到比标准值***小***的时候停止;
6.然后交换左右两边停止位置上的数,继续左边先开始,接着遍历;
7.最后当左右遍历到***相同的位置***时结束;
8.通过上面的遍历,把数组分成了上面两个部分,然后在对这两个部分进行上面的遍历,最后输出排序后的数组。
源代码:
/*
* 把一个无序数组运用快速排序法 从小到大排序
*/
public static void main(String[] args)
{
int[] arr = {7,8,2,3,4,1,5};
// 调用快排方法
quickSort(arr, 0, arr.length - 1);
// 进行遍历数组arr
for (int i = 0; i < arr.length; i++)
{
System.out.println(arr[i]);
}
}
/*
* 构造一个有参方法
*/
public static void quickSort(int[] arr, int life,int right)
{
// 用来终止方法
if (life >= right)
{
return;
}
int i, j, temp;
//定义标准值
temp = arr[life];
// i表示从左面开始,j表示从又开始
i = life;
j = right;
while (i < j)
{
// 先从左边看
while (temp > arr[i] && i < j)
{
i++;
}
// 再从右边看
while (temp <= arr[j] && i < j)
{
j--;
}
// 符合上面注释条件时,交换左右位置的值
if (i < j)
{
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
// 递归调用,排列数组的两边
quickSort(arr,life,j - 1);
quickSort(arr,j + 1, right);
}
代码中的终止条件很重要,如果没有终止条件,方法就会继续运行,我刚开始就是没有写终止条件,导致我的eclipse运行时瘫痪了
一定要注意!!!