您的位置:首页 > 编程语言 > C语言/C++

算法设计之快速排序的实现 (C++实现)

2014-08-21 11:54 661 查看
快速排序的算法设计思想是分治,其中最关键的部分在于分,选定一个元素作为主元,把比主元小的元素划分到一边,比主元大的元素划分到另一边,再在划分好的部分再次进行划分。划分的思路有两种,一种是从输入数组的两头向中间扫描,一种是设置两个索引从头开始一前一后向数组尾部扫描。我使用第二种方式划分数组。从我的描述中可以知道,整个排序过程是一个递归的过程。快速排序的过程和归并排序的过程类似,只是前者少了后者中用到的一步,也就是合并,因为,快速排序是原址排序,也就是说它是稳定排序,所以不需要合并。

// quicksort.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"
void quicksort(int* ,int ,int );
int partition(int*,int,int);
using namespace std;
int main(){
int A[8]={2,8,7,1,3,5,6,4};
int p=0,r=7;
quicksort(A,p,r);
for(int i=0;i<=r;i++)
cout<<A[i]<<",";
cout<<endl;
return 0;
}
void quicksort(int* A,int p,int r){
int q;
if(p<r){
q=partition(A,p,r);
quicksort(A,p,q-1);
quicksort(A,q+1,r);
}
}
int partition(int* A,int p,int r){
int x=A[r];
int i=p-1;
for(int j=p;j<r;j++){
if(A[j]<x){
i+=1;
int temp=A[j];
A[j]=A[i];
A[i]=temp;
}
}
int temp=A[i+1];
A[i+1]=A[r];
A[r]=temp;
return i+1;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: