程序员基础之——排序算法

Posted migoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员基础之——排序算法相关的知识,希望对你有一定的参考价值。

快速排序

前言

快速排序是在面试中最常见的问题之一,如果有幸问到快排,面试官通常都要求应聘者在纸上手写出快排的代码。本人在最近的一次面试中就被要求手写快排,本来觉得快排的思想早已烂熟于心了,随便写一个出来没什么问题。但是当面前坐着一个面试官,并且要在15分钟内推导出一个无措的快排出来时,对我个人来说,但是还是非常紧张的,最终提交的答案还是存在瑕疵。
由此萌生了通过博客记录面试中基本问题的想法,一是给自己归纳总结,二是希望能够给阅读博客的童鞋也提供一些参考。
本文的目的是想要记录快速排序简洁、优雅的实现方式,并且探讨快速排序的一些问题。并且参考了各类书籍与博客,目前觉得最简洁、最好理解的方式如下:

‘‘‘
void quickSort(int arr[], int lo, int hi){
if(!arr || lo < 0 || lo >= hi) return;
int mid = partition(arr, lo, hi);
quickSort(arr, lo, mid - 1);
quickSort(arr, mid + 1, hi);
}

void partition(int arr[], int lo, int hi){
int start = lo;
int end = hi + 1;
int value = arr[lo];
while(true){
while(arr[++start] < value && start < hi);
while(arr[--end] > value);
if(start >= end) break;
swap(&arr[start], &arr[end]);
}
swap(&arr[lo], &arr[end]);
return end;
}
‘‘‘
主要参考链接https://algs4.cs.princeton.edu/home/

以上是关于程序员基础之——排序算法的主要内容,如果未能解决你的问题,请参考以下文章

基础算法系列之排序算法[快速排序,归并排序,二分查找]

算法基础之选择排序

基础算法系列之排序算法-3. 直接插入排序

超大:排序算法之冒泡插入和选择排序

重温基础算法内部排序之希尔排序法

基础排序算法之-选择排序