排序系列--快速排序

来源:互联网 发布: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;
}

 

原创粉丝点击