`
xitongyunwei
  • 浏览: 928073 次
文章分类
社区版块
存档分类
最新评论

快速排序(java)

 
阅读更多

//快速排序

public class QuackSort {

// 排序方法
private static void sort(int[] arr, int low, int high) {
if (low >= high) // low小于或等于high,则直接返回
return;
if ((high - low) == 1) { // 如果只有两个数据,则直接比较
if (arr[0] > arr[1])
swap(arr, 0, 1);
return;
}
int pivot = arr[low]; // 取第一个数作为中间数
// 左滑块当前的下标数,从第二个数字开始,从最后一个开始
int left = low + 1;
int right = high; // 右滑块当前的下标数
while (left < right) {// 左右循环
// 从左边开始找
while (left < right && left <= high) {
if (arr[left] > pivot) // 找到一个大的数字没有
break;
left++; // 左下标往右走一点
}
// 从右边开始找
while (left <= right && right > low) {
if (arr[right] < pivot) // 找到一个小的数字没有
break;
right--; // 右下标往左走一点
}
if (left < right)// 如果还没找完,则交换数字
swap(arr, right, left);
}
swap(arr, low, right);// 交换中间数字
sort(arr, low, right);// 排序前面数组
sort(arr, right + 1, high);// 排序后边数组
}

// 交换位置
private static void swap(int[] array, int i, int j) {
int temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}

// 打印方法
private static void print(int[] a) {
for (int i = 0; i < a.length; i++) { // 遍历
System.out.print(a[i] + " "); // 打印,以空格隔开
}
System.out.println(); // 换行
}

// 主方法
public static void main(String[] args) {
int[] a = new int[] { 6, 9, 8, 4, 7, 3, 6, 2 };// 定义数组
print(a); // 打印之前的序列
sort(a, 0, a.length - 1); // 排序
print(a); // 打印排序后的结果
}

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics