是一个效率较高的排序算法,每一轮都会把比基准数小的放左边,比基准数大的放右边,本文章只是记录一下过程
盗用一张图来看看过程javascript
原文连接html
废话很少说,这篇文章主要来记录下我实现的过程java
var list = [6,5,5,10,24,2,4]; function quickSort(list,left,right){ if(left < right){ pivotIndex = partition(list,left,right); quickSort(list,left,pivotIndex - 1); quickSort(list,pivotIndex + 1 ,right); } return list; } function partition(list ,left,right){ pivot = list[left]; while( left < right){ while(list[right] > pivot && left < right){ --right; } list[left] = list[right]; while(list[left] <= pivot && left<right){ //list[left] <= pivot 这里须要知足等于的条件,由于若是存在相等的数, //left将永远不会大于right,因此要加上等于的状况, //left<right这个条件很重要,由于若是知足list[left] <= pivot这个后left会++, //此时有可能 left>right,若是不加的话可能会死循环 ++left; } //这里我发现有些文章没有作判断,由于有可能左右相等,因此不必交换 if(list[right] != list[left]){ list[right] = list[left]; } } list[left] = pivot; return left; } console.log(quickSort(list,0,list.length - 1))
我也参考了这些文章的写法
快速排序
漫画:什么是快速排序?git
以前一直不明白,后来查了资料,本身算是明白怎么回事了,算法仍是得本身手动实现一遍才能懂。github