快速排序算法

 快速排序的三个步骤

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;  
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值