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

算法导论第七章思考题7-2针对相同元素的快速排序-c++

2016-10-04 02:04 1021 查看
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <string>
#include <math.h>
#include <time.h>
using namespace std;
typedef struct Par_result
{
int q;
int t;
};
Par_result PARTITION(int a[],int p,int r)
{
int x = a[r];
int i = p - 1;
int t = p - 1;
for(int j=p;j<=r;j++)
{
if(a[j] < x)//or <=?
{
i++;
t++;
int  temp = a[t];
if(t == j)
{
a[t] = a[i];
a[i] = temp;
}
else
{
a[t] = a[i];
a[i] = a[j];
a[j] = temp;
}
}
else if(a[j] == x)
{
t++;
int temp = a[t];
a[t] = a[j];
a[j] = temp;
}
}
Par_result par_result = {i,t};
return par_result;
}

void quickSort(int a[],int p,int r)
{
if(p<r)
{
Par_result par_result = PARTITION(a,p,r);
quickSort(a,p,par_result.q);
quickSort(a,par_result.t+1,r);
}
}

int main()
{
char s;
//do{
int a[10];
//int a[10]= {1,4,5,6,4,2,7,4,8,4};
//int a[10] = {   8   , 8   , 9 ,   5  ,  9 ,   9,    5,    4,    3,    2};
srand(time(0));
for(int i=0;i<10;i++)
{
a[i] = rand()%10;
printf("%5d",a[i] );
}
cout<<endl;
quickSort(a,0,9);
for(int i=0;i<10;i++)
printf("%5d",a[i] );
cout<<endl;
cin>>s;
//}while(s == 'y' || s == 'Y');
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: