几种常用的排序方法2--快速排序
2012-11-20 22:51
330 查看
快速排序
快速排序是一种很有效的排序方法,它是对起泡排序的一种改进,它的基本思想是:通过一趟排序,将待排记录分成两个独立的部分,其中一部分均比一个关键字小,另一部分均比这个关键字大。然后使用递归,分别对这两部分继续进行快速排序。
具体是怎样将待排记录分成两个部分的呢?以前在论坛上看过一篇文章,感觉说的很好,叫“挖坑填土”法。
①:选取一个关键字(可以选择序列的第一个记录为关键字),把它挖出,这个地方就留下了一个坑。②:然后从序列的后面搜索,当找到一个比关键字小的数时,将这个小的数挖出,填入前面的坑中。③:然后从序列的前面搜索,当找到一个比关键字大的数时,将这个大数挖出,填入刚刚小数留下的坑中。④:然后返回②步骤。
快速排序的平均运行时间为θ(nlogn)。
快速排序是一种很有效的排序方法,它是对起泡排序的一种改进,它的基本思想是:通过一趟排序,将待排记录分成两个独立的部分,其中一部分均比一个关键字小,另一部分均比这个关键字大。然后使用递归,分别对这两部分继续进行快速排序。
具体是怎样将待排记录分成两个部分的呢?以前在论坛上看过一篇文章,感觉说的很好,叫“挖坑填土”法。
①:选取一个关键字(可以选择序列的第一个记录为关键字),把它挖出,这个地方就留下了一个坑。②:然后从序列的后面搜索,当找到一个比关键字小的数时,将这个小的数挖出,填入前面的坑中。③:然后从序列的前面搜索,当找到一个比关键字大的数时,将这个大数挖出,填入刚刚小数留下的坑中。④:然后返回②步骤。
快速排序的平均运行时间为θ(nlogn)。
void quick_sort(int s[], int l, int r) { if (l < r) { int i = l, j = r, x = s[l]; while (i < j) { while(i < j && s[j] >= x) // 从右向左找第一个小于x的数 j--; if(i < j) s[i++] = s[j]; while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数 i++; if(i < j) s[j--] = s[i]; } s[i] = x; quick_sort(s, l, i - 1); // 递归调用 quick_sort(s, i + 1, r); } }
相关文章推荐
- 几种常用排序方法的简单实现
- 几种常用的排序方法
- 几种常用的排序方法。
- 黑马程序员----Java中几种常用排序算法(选择排序、冒泡排序、快速排序)
- 编写学习的java几种常用数组的排序方法,给大家分享一下
- 常用的几种简单的内部排序方法
- 几种常用的排序方法5--堆排序
- java中常用的排序方法之-----快速排序
- 几种常用排序方法的C#实现
- Java有哪几种常用的排序方法
- C语言常用的几种排序算法代码(选择排序,冒泡排序,插入排序,快速排序)
- 【C#基础知识】之结构、数组及常用的几种排序方法总结
- 几种常用的排序方法
- C++实现几种常用的时间复杂度为O(nlogn)的排序方法:归并排序、快速排序、堆排序、希尔排序
- 二级c语言之常用的几种排序方法
- 几种常用的排序方法4--归并排序
- java中几种常用的排序方法
- 几种常用的C#排序方法简介
- 几种常用的排序方法3--选择排序
- java的几种常用排序方法集合