标签:
1. 快速排序算法
1.1 算法步骤:
1> 从数列中挑出一个元素,称为 “基准”(pivot),
2 > 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3 > 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去
1.2 算法代码:
 1 void QuickSort(Rectype R[], int s, int t) // 对R[]到R[]区间内的元素进行快速排序
 2 {
 3     int i = s;                            
 4     int j = t;
 5     Rectype tmp;
 6     if(s < t)                             // 区间内至少存在两个元素的情况
 7     {
 8         tmp = R[s];                       // 区间内的第一个元素作为基准即R[0]
 9         while(i!=j)                       // 从区间的两段交替向中间扫描,知道i=j为止
10         {
11             while(j>i && R[j].key>tmp.key)// 从右往左扫描,找到第一个小于tmp.key的元素R[i]
12                 j--;
13             R[i] = R[j];                  // 把之前弄出来的坑填上,自己形成一个坑
14 
15             while(i<j && R[i].key>tmp.key)// 从左往右扫描,找到第一个大于tmp.key的元素R[j]
16                 i++;
17             R[j] = R[i];                  // 把上一次循环形成的坑填上,自己形成一个坑
18         } 
19 
20         R[i] = tmp;                       // 基准元素归位
21 
22         QuickSort(R, s, i-1);             // 对左区间递归
23         QuickSort(R, i+1, t);             // 对右区间递归
24     }
25 }
1.3 算法解析:
链接如下: http://blog.csdn.net/morewindows/article/details/6684558
标签:
原文地址:http://www.cnblogs.com/gossiplee/p/4489015.html