算法基础——快速排序


title: 算法基础——快速排序
categories:

  • Algorithms
    tags:
  • 排序算法
    abbrlink: 254341469
    date: 2019-11-29 16:41:37

排序

快速排序

  • 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

思路

  1. 一个 arr[N]的数组,首先确定一个分界值,一般的我们选择 arr[0]
  2. 然后将后续的元素分别与 arr进行比较,小的集中到数组的左边,大的集中到数组的右边
  3. 对两个集合分别重复1 、2步骤,当左右两部分都排序好,整个数组就排序好了

算法

  1. 设置两个变量ij,排序开始时,i = 0 ,j =arr.length-1
  2. 以第一个数组元素作为分界值,赋值给pivot,pivot =arr[i];
  3. 从j开始搜索,从后往前的搜索 j–,找到第一个小于 key的值,将 arr[j] 与arr[i]交换
  4. 从i开始搜索,从前往后的搜索 i++,找到第一个大于key的值,将arr[i] 与 arr[j]交换
  5. 重复3.4步骤,直到 i==j

代码

public static int[] quickSort(int[] arr, int start, int end) {
		int pivot = arr[start];
		int i = start;
		int j = end;
		int temp;
		while (i < j) {
			while (i < j && arr[j] > pivot) {
				j--;
			}
			temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
			while (i < j && arr[i] < pivot) {
				i++;
			}
			temp = arr[j];
			arr[j] = arr[i];
			arr[i] = temp;
		}
		if (i - 1 > start) {
			arr = quickSort(arr, start, i - 1);
		}
		if (j + 1 < end) {
			arr = quickSort(arr, j + 1, end);
		}
		return arr;
	}

笔记

  • 快速排序的一次划分算法从两头交替搜索,直到low和high重合,因此其时间复杂度是O(n)
  • 可以证明,快速排序的平均时间复杂度也是O(nlog2n)。因此,该排序方法被认为是目前最好的一种内部排序方法
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
4363次浏览 47人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16917次浏览 137人参与
# 巨人网络春招 #
11540次浏览 228人参与
# 沪漂/北漂你觉得哪个更苦? #
1616次浏览 41人参与
# 你的实习产出是真实的还是包装的? #
3196次浏览 53人参与
# 春招至今,你的战绩如何? #
16021次浏览 146人参与
# 米连集团26产品管培生项目 #
7375次浏览 226人参与
# HR最不可信的一句话是__ #
1107次浏览 32人参与
# AI面会问哪些问题? #
971次浏览 24人参与
# 你做过最难的笔试是哪家公司 #
1306次浏览 23人参与
# AI时代,哪个岗位还有“活路” #
2930次浏览 53人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152945次浏览 889人参与
# 简历第一个项目做什么 #
32180次浏览 363人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8029次浏览 43人参与
# XX请雇我工作 #
51164次浏览 171人参与
# 简历中的项目经历要怎么写? #
311119次浏览 4271人参与
# 投格力的你,拿到offer了吗? #
178382次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
77008次浏览 375人参与
# AI时代,哪些岗位最容易被淘汰 #
64819次浏览 891人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187635次浏览 1123人参与
# 你怎么看待AI面试 #
180882次浏览 1318人参与
# 正在春招的你,也参与了去年秋招吗? #
364407次浏览 2642人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务