备战考研算法笔记(四)快速排序

题目描述:

    对输入的n个数进行排序并输出。

输入:

    输入的第一行包括一个整数n(1<=n<=100)。
    接下来的一行包括n个整数。

输出:

    可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。
    每组测试数据的结果占一行。

样例输入:
4
1 4 3 2
样例输出:
1 2 3 4 

 1 #include <stdio.h>
 2 #include "StdAfx.h"
 3 #include <malloc.h>
 4 
 5 //快速排序
 6 void quick_sort(int s[], int l, int r)
 7 {
 8     if (l < r)
 9     {
10               //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
11         int i = l, j = r, x = s[l];
12         while (i < j)
13         {
14             while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
15                             j--; 
16             if(i < j)
17                             s[i++] = s[j];
18                     
19             while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
20                             i++; 
21             if(i < j)
22                             s[j--] = s[i];
23         }
24         s[i] = x;
25         quick_sort(s, l, i - 1); // 递归调用
26         quick_sort(s, i + 1, r);
27     }
28 }
29 
30 int main()
31 {
32   int length;
33   while(scanf("%d",&length)!=EOF)
34   {
35     int *s;
36     s=(int*)malloc(length*sizeof(int));
37     for(int i=0;i<length;i++)
38     {
39         scanf("%d",&s[i]);
40     }
41     //printf("\n");
42     quick_sort(s,0,length-1);
43     for(int i=0;i<length;i++)
44     {
45         printf("%d ",s[i]);
46     }
47     printf("\n");
48   }
49 }

 

posted @ 2013-08-07 00:36  Joilee  阅读(355)  评论(0编辑  收藏  举报