排序系列--快速排序
来源:互联网 发布:linux应用开发实例 编辑:程序博客网 时间:2024/04/26 05:46
// 排序系列--快速排序.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <ctime>//用于调用随机种子函数
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;
//说明:快速排序算法是对冒泡排序的改进,基本思想:在无序序列中选择一个轴值(某个元素)
//,将无序序列分为两个分区,即轴值左侧的元素均小于等于轴值,
//右侧大于等于轴值,然后对每个分区,重复这个过程,直到整个序列有序为止
//VS2010上编译通过
int Partion(int a[],int first,int end)//一趟快速排序
{
int i=first;//first指向分区第一个数值(或元素主键码)
int j=end;//end指向分区最后一个元素
int pivot=a[i];//将分区第一个元素定位为轴值
while(i<j)
{
while ((i<j)&&(a[j]>=pivot))//右侧扫描,判断是否存在小于轴值的元素,如果有,则不执行while,转向下一步,如果没有,记录前移
{
j--;
}
a[i]=a[j];//上面说的下一步(交换)
while((i<j)&&(a[i]<=pivot))//左侧扫描
{
i++;
}
a[j]=a[i];//交换
}
a[i]=pivot;//返回最终轴值所在的位置,因为此时i==j,所以a[j]=pivot;也可以
return i;
}
void QuickSort(int a[],int i,int j)//利用递归的方法执行排序比较简单,因为每个分区所执行的操作都是一样的
{
if (i<j)
{
int pivot=Partion(a,i,j);
QuickSort(a,i,pivot-1);
QuickSort(a,pivot+1,j);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[20];
srand( (unsigned)time(NULL) );
for (int i=0;i<20;i++)
{
a[i]=rand()%40;
}
QuickSort(a,0,19);
for (int i=0;i<20;i++)
{
cout<<a[i]<<" ";
}
system("pause");
return 0;
}
- 排序系列--快速排序
- 排序系列之快速排序
- 排序系列之快速排序
- 排序系列之快速排序
- 排序系列之快速排序
- 排序算法系列:快速排序
- 源码系列:快速排序
- 算法系列-快速排序
- 排序算法系列八(快速排序)
- 【排序系列】快速排序java实现
- 排序系列--快速排序(实现+复杂度分析)
- 七大排序算法系列之快速排序
- 排序算法系列——快速排序
- 排序算法系列:快速排序算法
- 排序总结系列五:快速排序
- 排序算法系列二之快速排序
- PHP排序算法系列:快速排序
- 排序算法系列-交换之快速排序
- 10046跟踪
- gevent
- 字符串编辑距离
- android intent和intent action大全
- 关于实现HLS直播的一些探究
- 排序系列--快速排序
- C程序访问hadoop程序编译通过后在运行的时候出现:WARN util.NativeCodeLoader错误。
- poj 3714 变形的最近点对
- Linux操作系统下Oracle主要监控工具介绍
- Greedy
- NoSQL学习之路 (五):更新操作符(Update Operators).2nd
- Java中static、final用法小结
- Web开发者的福利 30段超实用CSS代码
- 沃顿最高荣誉毕业生