快速排序
原理:
每次循环根据指定的基准数,将其他元素分别放置在其左右,由此循环。
例:
int[] arr={6,1,2,7,9,3,4,5,10,8};
/\ |
基准数 first end
first找比基准值大的,end找比基准值小的
int[] arr={6,1,2,7,9,3,4,5,10,8};
/ | |
基准数 first end
交换first和end
int[] arr={6,1,2,5,9,3,4,7,10,8};
继续移动
int[] arr={6,1,2,5,9,3,4,7,10,8};
/ | |
基准数 first end
交换first和end
int[] arr={6,1,2,5,4,3,9,7,10,8};
/ | |
基准数 first end
继续移动
int[] arr={6,1,2,5,4,3,9,7,10,8};
/ |
基准数 first end
first和end都指向中间,交换基准数和中间数
int[] arr={3,1,2,5,4,6,9,7,10,8};
对基准数两边的数组重复操作
代码实现
public class QuickSort {
public void QuickSort (int[] arr, int frist, int last) {
if (frist > last) return;//递归出口
int i = frist;
int j = last;
int temp = arr[frist];
while (i != j) {
while (arr[j] >= temp && j > i) {//从右往左找到第一个小于mark的数
j--;
}
while (arr[i] <= temp && i < j) {//从左往右找到第一个大于mark的数
i++;
}
if (i < j) {//交换
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
if (i == j) {//交换基准数
arr[frist] = arr[i];
arr[i] = temp;
}
QuickSort (arr, frist, i - 1);//前半部分继续进行
QuickSort (arr, i + 1, last);//后半部分继续进行
}
}
原文:https://blog.csdn.net/Advance_/article/details/81880509