排序——快速排序(C++)
2016-03-20 21:34
232 查看
1、算法描述:
1.1 设当前参加排序的数组为array[0..n-1]选择一个元素(通常称该元素为基准元素)作为基准元素;
将小于或者等于基准元素的所有元素都移到基准元素的左边;
把大于或者等于基准元素的所有元素都移到分界元素的右边;
执行完(2),(3)步骤后,基准元素左边元素序列,基准元素,基准元素右边元素序列正好完成排序;
然后在对基准元素左边元素序列和基准元素右边元素序列再次执行(1),(2),(3)步骤;
直到左边序列和右边序列长度等于1为止,这样排序就完成了。
1.2 分界元素可以选取
待排序数组序列的第一个元素;
待排序数组序列的最后一个元素;
待排序数组序列位置居中的元素
(本次代码实例选择第一个元素作为基准元素)
原理如图所示:
说明:排序过程中需要设定两个排序变量i, j.
i的初始值设置为排序序列中第一个元素, j的初始值设置为排序序列的最后一个元素位置;令x = a[i];
当 while ( i<j && a[i]<x )成立时,则i++;如果i<j,则a[i] = a[j];i++;
当while ( i<j && a[j]>x ) 成立时,则j--;如果i<j,则a[j] = a[i];j--;
执行将基准元素赋给a[i]的操作:a[i] = x;
然后递归进行基准元素左边序列和基准元素右边序列的(1)(2)(3)(4);直到整个序列排序结束。
代码实例:
#include <iostream> using namespace std; int quick_sort(int a[], int left, int right) { if (left<right) { int i = left; int j = right; int x = a[i]; while (i<j) { while ( i<j && a[j]>x ) j--; if ( i<j ){ a[i] = a[j]; i++; } while ( i<j && a[i]<x ) i++; if ( i<j ){ a[j] = a[i]; j--; } } a[i] = x; quick_sort(a, left, i - 1); quick_sort(a, i + 1, right); } return 0; } int main() { cout << "**************Quickly_sort***************\n"; int a[] = { 49,38,65,97,76,13,27,49}; int size = sizeof(a) / sizeof(int); cout << "原始的数组:"; for (int i = 0; i<size; i++) cout << a[i] << " "; cout << endl; quick_sort(a, 0, size-1); cout << "排序后数组:"; for (int i = 0; i<size; i++) cout << a[i] << " "; cout << endl; system("pause"); return 0; }
运行结果:
快速排序的时间复杂度为:O(nlgn)。
相关文章推荐
- 5-23 币值转换 (20分)c语言版
- 【c++】有理数加法
- 【c++】有理数加法
- C++中的static关键字
- C++上机实验2-2
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- 一起talk C栗子吧(第一百二十六回:C语言实例--static关键字)
- C/C++学习之路
- C++ 默认实参
- 读书笔记 |Google C++编程风格指南
- [C/C++] C/C++延伸学习系列之STL及Boost库概述
- [c++]链表实现--持续更。
- C++继承和包含
- C++继承和包含
- 利用c语言宏#的用法打日志并统计错误
- C++小结
- C++第二次上机报告
- C++ 重载和const形参
- 【c++】冒泡法排序
- 【c++】冒泡法排序