python和C语言分别实现快速排序

本文介绍了一种经典的排序算法——快速排序,并提供了Python和C两种语言的实现代码。Python部分使用了随机数生成器来初始化待排序数组,而C部分则通过交换函数实现了分区操作。

python 部分:


代码

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->from random import Random

def quick_sort(arr):
    if len(arr) > 1:
        qsort(arr,0,len(arr)-1)

def qsort(arr,start,end):
    base = arr[start]
    pl = start + 1
    pr = end
    while True:
        while arr[pl] > base:
            pl += 1
        
        while arr[pr] < base:
            pr -= 1
        
        if pl >= pr:
            break;
        
        arr[pl],arr[pr] = arr[pr],arr[pl]
    arr[start] = arr[pr]
    arr[pr] = base
    
    if(pr - 1 > start):
        qsort(arr,start,pr - 1)
    if(pl + 1 < end):
        qsort(arr,pr+1,end)

r = Random()
a = []
for i in range(20):
    a.append(r.randint(0,100))

print a
quick_sort(a)
print a

最后结果:

[20, 84, 4, 12, 48, 91, 71, 84, 44, 43, 78, 46, 26, 50, 51, 90, 40, 7, 93, 62]
[93, 91, 90, 84, 84, 78, 71, 62, 51, 50, 48, 46, 44, 43, 40, 26, 20, 12, 7, 4]

C部分:


代码

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/*
 * =====================================================================================
 *
 *       Filename:  quickSort.cpp
 *
 *    Description:  quick Sort method
 *
 *        Version:  1.0
 *        Created:  11/25/2010 08:52:33 PM
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  Archy Yu 
 *        Company:  
 *
 * =====================================================================================
 */

#include<stdio.h>

void swap(int &i,int &j)
{
    int k = i;
    i = j;
    j = k;
}

int Partition(int a[3],int left,int right)
{
    int i = left;
    int j = right + 1;
    int tem = a[i];
    while(true)
    {
        while(a[++i] < tem);
        while(a[--j] > tem);

        if(i >= j)
            break;

        swap(a[i],a[j]);
    }
    a[left] = a[j];
    a[j] = tem;
    return j;
}

void QuickSort(int a[3],int left,int right)
{
    if(left < right)
    {
        int part = Partition(a,left,right);
        QuickSort(a,left,part-1);
        QuickSort(a,part+1,right);
    }
}

int main()
{
    int b[3] = {9,7,8};
    QuickSort(b,0,3);
    for(int i=0;i<=2;i++)
    {
        printf("%d ",b[i]);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值