码迷,mamicode.com
首页 > 编程语言 > 详细

十种常用的算法

时间:2015-05-10 11:23:41      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!