关于数组快速排序的问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 05:53:18
// 函数模板.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
#include "quiksort.h"

int main()
{
int dim;
std::cout<<"输入数组个数:"<<std::endl;
std::cin>>dim;
//随机整数数组
int *arrs=new int[dim+1];
int i;
//限定10以内
for(i=0;i<dim;i++)
arrs[i]=rand()%10;

std::cout<<std::endl<<"没有排序:"<<std::endl;
//显示没有排序的数组
for(i=0;i<dim;i++)
std::cout<<std::setw(8)<<arrs[i];
//排序数组
quicksort(arrs,dim);

std::cout<<std::endl<<"已排序:"<<std::endl;
//显示排序的数组
for(i=0;i<dim;i++)
std::cout<<std::setw(8)<<arrs[i];

std::cout<<std::endl;

快速排序运用了分治的策略
首先任取数据a[x]作为基点(基点是任意的,(left+right)/2与第一个元素其实是一样的,当然你也可以选最后一个元素作基点)。比较a[x]与其它数据并排序,使a[x]排在数据的第k位,并且使a[1]~a[k-1]中的每一个数据<a[x],a[k+1]~a[n]中的每一个数据>a[x],这就完成了一次分治,然后采用递归的方法分别对a[1]~a[k-1]和a[k+1]~a[n]两组数据进行快速排序。

你测试程序用的数据是怎样的?
最好有随机数生成器生成一组比较多的数据