今天看了算法导论的快速排序算法第96页。上无聊的实验课,就照着为代码写了c语言版的。只要思想是分治。在这里,选取了数组中最后一个数最为主元,然后依次与数组中的值比较,把大于主元的放在后面,小于主元的放在前面。这样主元前面的数一定小于主元后面的数,那么再对主元前面的进行一次排序,对主元后面的进行一次排序。以此类推,最终数组按升序排好了。代码如下:
// quick.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
int partition(int a[],int p,int r){
int x=a[r];
int i=p-1;
for(int j=p;j<=r-1;j++){
if(a[j]<=x){
i++;
int temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
int temp=a[r];
a[r]=a[i+1];
a[i+1]=temp;
return i+1;
}
void quicksort(int a[],int p,int r){
int q;
if(p<r)
{
q=partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}
int main(int argc, char* argv[])
{
//printf("%d",r);
printf("快速排序前:\n");
int a[]={2,8,7,1,3,5,6,4};
for (int b=0;b<8;b++)
printf("%3d",a[b]);
int r=(sizeof(a)/sizeof(int));
quicksort(a,0,r-1);
printf("\n");
printf("快速排序后:\n");
for(int c=0;c<8;c++)
printf("%3d",a[c]);
}