快速排序算法

来源:互联网 发布:低音炮哪个牌子好 知乎 编辑:程序博客网 时间:2024/06/06 13:05

 快速排序的三个步骤

1) 选择基准:在待排序列中,按照某种方式挑出一个元素,作为 “基准”(pivot);

2) 分割操作:以该基准在序列中的实际位置,把序列分成两个子序列。此时,在基准左边的元素都比该基准小,在基准右边的元素都比基准大;

3) 递归地对两个序列进行快速排序,直到序列为空或者只有一个元素;



i = j = 2, 这样序列就这样分割成了两部分,左边部分{20, 10} 均小于 基准值(30);右边部分 {60, 40,50}均大于基准值。

这样子我们就达到了分割序列的目标。再接着对左右子序列分别用同样的办法进行分割,直至左右子序列不超过一个元素,那么排序结束,整个序列处于有序状态。


<?php//快速排序header("content-type:text/html;charset=utf-8");function quick_sort($arr,$left,$right){    if ($left>=$right)    {        //var_dump($arr);            return ;    }    $i = $left;    $j = $right;    $temp= $arr[$left];    while ($i != $j)    {        while($i < $j && $arr[$j] >= $temp) // 从右向左找第一个小于x的数            $j--;          if($i < $j)             $arr[$i] = $arr[$j];        while($i < $j && $arr[$i] < $temp) // 从左向右找第一个大于等于x的数            $i++;          if($i < $j)             $arr[$j] = $arr[$i];    }    $arr[$i] = $temp;    quick_sort(&$arr, $left, $i - 1); // 递归调用     quick_sort(&$arr, $i + 1, $right);}$list = array('23','38','22','45','23','67','31','15','41');quick_sort(&$list,0,8);var_dump($list);

c语言版本

#define _CRT_SECURE_NO_WARNINGS  #include <stdlib.h>  #include<stdio.h>  #include <string.h>  //快速排序算法void quick_sort(int *arr,int left,int right)  {  int i,j,tmp;if (left>=right)  {  return ;  }  i = left;  j = right;  tmp = arr[i];  while (i != j)  {  while(i < j && arr[j] >= tmp) // 从右向左找第一个小于tmp的数  j--;    if(i < j)   arr[i] = arr[j];  while(i < j && arr[i] < tmp) // 从左向右找第一个大于等于tmp的数  i++;    if(i < j)   arr[j] = arr[i];  }  arr[i] = tmp;  quick_sort(arr, left, i - 1); // 递归调用   quick_sort(arr, i + 1,right);  }  int main()  {      int array[] = {30,40,60,10,20,50};      quick_sort(array,0,5);      printArray(array,6);      system("pause");      return 0;  }



0 0
原创粉丝点击