疾速排序
思维:任取待排序元素序列中的某个元素作为基准,依照该元素的排序码大小,把整个元素序列分为左右两个子序列:左侧子序列中的所有元素都比基准元素小,右侧所有元素都比基准元素大,而后别离对这两个子序列反复之前的操作,直到整个序列排好序。
例子:
初始序列: 基准(pivot)

             21 25 49 25* 16 8            21

1 8 16 21 25 25 49 8(left) 25(right)
2 8 16 21 25* 25 49 25(right)
3 8 16 21 25* 25 49

稳定性:不稳固
工夫复杂度:O(nlogn)
代码:c++
//疾速排序
void Quick_sort(int arr[],int left,int right) {

   if (left >= right)          return;   else {          int pivot = arr[left];//基准          int i = left;//左指针          int j = right;//右指针          while (i < j) {//当左<右时,扫描序列                  while (i < j && arr[j] >= pivot)//从右往左扫描遇到比基准小的值则停下来                         j--;                  while (i < j && arr[i] <= pivot)//从左往右扫描遇到比基准大的值则停下来                         i++;                  if (i<j) {//而后替换这两个值                         swap(arr[i], arr[j]);                  }                }          if (i = j) {//当扫描到左右指针相遇时,示意扫描完结,将基准值和以后地位的值进行替换

//咱们始终是以最右边的元素为基准元素的

                  arr[left] = arr[i];                  arr[i] = pivot;          }          Quick_sort(arr, left,i-1);          Quick_sort(arr, i+1,right);   }

}