诀要:
- 找基数,一般就取数组第一个 array[0] ;
- 从右边遍历找到比基数小的,将值赋值给左边;
- 从左边遍历找到比基数大的,将值赋值给右边;
- 依次重复 2,3 步骤,直到左右两边遍历的下标序数相等;
- 将基数赋值给当前左边(or右边,经过遍历左遍历和右遍历的当前下标相等);
- 以基数分割数组为左右两部分(分治法),递归计算分部的排序。
代码截图
算法代码手写稿,去掉打印的代码
精简后的代码:
/// <summary> /// 快速排序 /// </summary> /// <param name="array"></param> /// <param name="left"></param> /// <param name="right"></param> private void QuickSort(int[] array,int left,int right) { int originalLeft = left, originalRight = right; int baseNumber = array[left]; while (right > left) { while (right > left && array[right] >= baseNumber) right--; array[left] = array[right]; while (left < right && array[left] <= baseNumber) left++; array[right] = array[left]; } array[left] = baseNumber; if(originalLeft < left - 1) QuickSort(array, originalLeft, left - 1); if(originalRight > right + 1) QuickSort(array, right + 1, originalRight); }
author:韦小明
本文即原文:排序算法之快速排序