快速排序算法
快速排序算法: 快速排序的原理:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素。
一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果没有继续比较下一个,直到找到第一个比基准值小的值才交换。找到这个值之后,又从前往后开始比较,如果有比基准值大的,交换位置,如果没有继续比较下一个,直到找到第一个比基准值大的值才交换。直到从前往后的比较索引>从后往前比较的索引,结束第一次循环,此时,对于基准值来说,左右两边就是有序的了。
实例:
public static int num = 1;
List<Integer> list2 = new ArrayList<Integer>();
list2.add(8);
list2.add(7);
list2.add(10);
list2.add(15);
list2.add(5);
list2.add(16);
list2.add(233);
list2.add(11);
list2.add(21);
list2.add(1);
list2.add(67);
list2.add(3);
list2.add(31);
list2.add(999);
list2.add(109);
// 快速排序
quickSort(list2, 0, list2.size() - 1);
// 快速排序
public static void quickSort(List array, int left, int right) {
if (left > right) {
return;
}
int start = left;
int end = right;
int keyword = (Integer) array.get(left);
System.out.println("--------------------------");
System.out.println(num + "次排序前:" + array.toString());
System.out.println(num + "次排序前:start=" + start + ",end=" + end+ ",left=" + left + ",right=" + right);
while (start != end) {
while ((Integer) array.get(end) >= keyword && start < end) {
end--;
}
while ((Integer) array.get(start) <= keyword && start < end) {
start++;
}
if (start < end) {
int temp = (Integer) array.get(start);
array.set(start, array.get(end));
array.set(end, temp);
System.out.println(num + "次调整中---->" + array.toString());
System.out.println(num + "次调整中:start=" + start + ",end=" + end+ ",left=" + left + ",right=" + right);
}
}
array.set(left, array.get(start));
array.set(start, keyword);
System.out.println(num + "次排序后:" + array.toString());
System.out.println(num + "次排序后:start=" + start + ",end=" + end+ ",left=" + left + ",right=" + right);
num++;
quickSort(array, left, start - 1);
quickSort(array, start + 1, right);
}