快速排序

来源:互联网 发布:淘宝一单刷几百件 编辑:程序博客网 时间:2024/05/16 05:17

思路(正序):在一个数组中选出一个n位置的key值,使得数组中的位置小于n的值小于可以,位置大于n的值大于key值。利用递归对左右两部分重复这一过程,既可以正确排序。

198.#include <stdio.h>199.void swap(int *a,int *b)200.{201.int temp = *a;202.*a = *b;203.*b = temp;204.}205.void sort(int *list,int m,int n)206.{207.int key=0;208.int k = (m+n)/2;209.int i=0,j=0;210.if(m<n)211.{212.swap(list+m,list+k);213.key = list[m];214.i = m+1;215.j = n;216.while(i<=j)217.{218.while(i<=n&&list[i]<=key)219.{220.i++;221.}222.while(j>=m&&list[j]>=key)223.{224.j--;225.}226.if(i<j)227.{228.swap(list+i,list+j);229.}230.}231.swap(list+m,list+j);232.sort(list,m,j-1);233.sort(list,j+1,n);234.}235.}236.void print(int *num)237.{238.int i=0;239.for(i=0;i<10;i++)240.{241.printf("%-3d",num[i]);242.}243.}244.int main(void)245.{246.int num[10]={3,2,0,1,8,9,5,4,7,6};247.sort(num,0,9);248.print(num);249.return 0;250.} 


0 0
原创粉丝点击