数据结构——快速排序

 

  
    
// 快速排序算法
#include < iostream >
#include
< cstdlib >
#include
< ctime >
using namespace std;

// 快速排序
int Partition( int num[], int i, int j) // 调用Partition(num,low,high)时,对num[low...high]做划分,并返回基准记录的位置
{
int pivot = num[i]; // 用区间的第1个记录作为基准

while (i < j) // 从区间两端交替向中间扫描,直至i=j为止
{
while (i < j && num[j] >= pivot) // pivot相当于在位置i上
j -- ; // 从右向左扫描,查找第1个关键字小于pivot的记录num[j]

if (i < j) // 表示找到的num[j]的关键字<pivot
num[i ++ ] = num[j]; // 相当于交换num[i]和num[j],交换后i指针加1

while (i < j && num[i] <= pivot) // pivot相当于在位置j上
i ++ ; // 从左向右扫描,查找第1个关键字大于pivot的记录num[i]

if (i < j) // 表示找到了num[i],使num[i]>pivot
num[j -- ] = num[i]; // 相当于交换num[i]和num[j],交换后j指针减1
} // end while

num[i]
= pivot; // 基准记录已被最后定位
return i;
}

void Quicksort( int num[], int low, int high)
{
int pivotpos; // 划分后的基准记录的位置
if (low < high) // 仅当区间长度大于1时才须排序
{
pivotpos
= Partition(num,low,high); // 对num[low..high]做划分

Quicksort(num,low,pivotpos
- 1 ); // 对左区间递归排序
// for(int i=low;i<=pivotpos-1;i++) // 追踪左区间的排序情况
// cout<<num[i]<<" ";
// cout<<endl;

Quicksort(num,pivotpos
+ 1 ,high); // 对右区间递归排序
// for(i=pivotpos+1;i<=high;i++) // 追踪右区间的排序情况
// cout<<num[i]<<" ";
// cout<<endl;

}
}

int main()
{
srand((unsigned)time(
0 )); // 随机生成数据算法
int num[ 100 ];
for ( int i = 0 ;i < 100 ; ++ i)
num[i]
= rand() % 1000 ;

cout
<< " 随机生成的原始数据 : " ;
for (i = 0 ;i < 100 ; ++ i)
{
if ( 0 == i % 10 )
cout
<< endl;
cout
<< num[i] << " " ;
}

Quicksort(num,
0 , 99 );

cout
<< endl << endl << " 排序后的数据: " ;
for (i = 0 ;i < 100 ; ++ i)
{
if ( 0 == i % 10 )
cout
<< endl;
cout
<< num[i] << " " ;
}
return 0 ;
}

 

你可能感兴趣的:(数据结构)