1.什么是排序?
排序是按照某种顺序(升序或者降序)排列序列元素的一种算法。
2.为什么需要排序?
排序是计算机科学中的重要算法,排序有时候可以显著降低问题的复杂度,可以使用排序作为减少查找复杂度的一种技术。鉴于排序的重要性,已有针对排序算法的大量研究并将其用于多种计算机算法(例如:查找元素)、数据库算法和其他的算法中。
3.快速排序
快速排序(quicksort)是分治算法技术的一个实例,也称为分区交换排序。快速排序采用递归调用对元素进行排序,是基于比较的排序算法中的一个著名算法。
划分:数组A[0…n]被分成A[0,…,mid] 和 A[mid+1 ,…,n],使得分开的两个数组,前者的元素全部小于后者的元素,然后再划分的过程中不断的计算key的索引位置。
分而治之:对第一遍区分出来的数组进行递归快速排序。
算法思路:
1)如果数组中仅有一个元素或者没有元素需要排序,则返回。
2)选择数组中的一个元素作为key(通常是第一个元素)。
3)先进行第一次排序,然后分成两部分:一部分大于key,一部分小于key。
4)对这两部分使用递归,调用该算法。
源码如下:
public static int[] quickSort(int[] arr, int low, int hight) {
if (low > hight) {
return arr;
}
int left = low, right = hight, key = arr[low]; // 初始化变量
while (left < right) {
while (left < right && key < arr[right]) {
right--;
}
while (left < right && key >= arr[left]) {
left++;
}
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
int temp = arr[right];
arr[right] = arr[low];
arr[low] = temp;
quickSort(arr, low, right - 1);
quickSort(arr, right + 1, hight);
return null;
}