快速排序算法

快速排序算法采用分治法思想;快速排序是冒泡排序的一种改进;

快速排序的标志位的选取有一下几种情况:

1.每次都取第一个元素,这样操作简单,但是效率不一定高

2.每次都取最后一个元素,同上

3.随机产生一个下标,用此下标所表示的数字作为标志位

4.随机产生一个下标,用此下标所表示的数字与第一个元素交换,剩下的操作同1

 

代码如下(每次选取第一个元素作为标志位):

QuickSort.c文件如下:

#include "QuickSort.h"

void QuickSort(int R[],int s,int t)//使数据最快的达到目的位置;是随机选择一个数,还是选择第一个数,
                                   //肯定选择第一个操作简单,但是效率不见得高
{
    int i, j, temp;
    if(s>=t)  //只剩一个数据的时候返回
        return;
    i=s, j=t;
    temp=R[s];
    while(i!=j)
    {
        while((j>i) && (R[j]>temp))//先从后边操作的原因是可以与第一个交换,
                                   //因为第一个数已经保存在temp里了,以此类推,每次交换覆盖的都是垃圾值
         {
            j--;
        }
        if(i<j)
        {
            R[i]=R[j];
            i++;
        }
        while((i<j) && (R[i]<temp))
        {
            i++;
        }
        if(i<j)
            R[j--]=R[i];//先赋值,再自减
    }
    R[i]=temp;//R[j]=temp;也行
    QuickSort(R, s, i-1);
    QuickSort(R, i+1, t);
}

 

QuickSort.h文件如下:

#ifndef _QUICKSORT_H_
#define _QUICKSORT_H_

void QuickSort(int f[],int s,int t);

#endif //_QUICKSORT_H_

 

Test.c文件如下:

#include "QuickSort.h"
#include <stdio.h>

int main()
{
    int i;
    int nArray[]={1, 3, 2, 9, 4, 7, 8, 2, 7, 4};
    QuickSort(nArray, 0, sizeof(nArray)/sizeof(*nArray)-1);
    
    for(i=0;i<sizeof(nArray)/sizeof(*nArray);i++)
        printf("%d ",nArray[i]);
    return 0;
}

 Python代码QuickSort.py如下:

#!/usr/bin/python

def QuickSort(num,s,t):
    if s >= t:
        return
    b = s
    e = t
    temp = num[s]
    while b != e:
        while (b < e) and (num[e] > temp):
            e -= 1
        if b < e:
            num[b]=num[e]
            b+=1
        while (b < e) and (num[b] <  temp):
            b+=1
        if b < e:
           num[e]=num[b]
           e -= 1
    num[b] = temp
    QuickSort(num,s,b-1)
    QuickSort(num,b+1,t)

numbers = [3,1,2,7,0,8,10,-5,9,4]
print numbers
QuickSort(numbers,0,len(numbers)-1)
print numbers

 

posted @ 2013-05-18 16:45  独墅一枝花  阅读(212)  评论(0编辑  收藏  举报