您的位置:首页 > 其它

算法导论 第七章快速排序中两种swap函数实现方式比较

2011-02-15 22:31 405 查看
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

void Swap(int array[] , int i , int j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}

int Partition(int array[] , int begin , int end)
{
int sentinel = array[end];
int i = begin-1;
for(int j=begin ; j<end ; j++)
{
if(array[j] <= sentinel)
{
i++;
Swap(array , i , j);
}
}
Swap(array , i+1 , end);
return i+1;
}

void QuickSort(int array[] , int begin , int end)
{
int q;
if(begin < end)
{
q = Partition(array , begin , end);
QuickSort(array , begin , q-1);
QuickSort(array , q+1 , end);
}
}
int main()
{
const int n = 100;
int a
;
srand(time(0));
for(int i=1 ; i<n ; i++)
{
a[i] = rand()%1000;
}

QuickSort(a , 1 , n-1);

for(int i=1 ; i<n ; i++)
{
cout << a[i] << ' ';
}
cout << endl;
return 0;
}


#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

void swap(int array[] , int i , int j)
{
if(i!=j)                       //This comparision is most important.
{                              //Because function Partition always let its element exchang itself.
//cout << array[i] << ' ' << array[j] << endl;
array[i] = array[i]+array[j];
array[j] = array[i]-array[j];
array[i] = array[i]-array[j];
//cout << array[i] << ' ' << array[j] << endl;
}
}

int Partition(int array[] , int begin , int end)
{
int sentinel = array[end];
int i = begin-1;
for(int j=begin ; j<end ; j++)
{
if(array[j] <= sentinel)
{
i++;
swap(array , i , j);
}
}
swap(array , i+1 , end);
return i+1;
}

void QuickSort(int array[] , int begin , int end)
{
int q;
if(begin < end)
{
q = Partition(array , begin , end);
QuickSort(array , begin , q-1);
QuickSort(array , q+1 , end);
}
}
int main()
{
const int n = 10;
int a
;
srand(time(0));
for(int i=1 ; i<n ; i++)
{
a[i] = rand()%100;
}

for(int i=1 ; i<n ; i++)
{
cout << a[i] << ' ';
}
cout << endl;

QuickSort(a , 1 , n-1);

for(int i=1 ; i<n ; i++)
{
cout << a[i] << ' ';
}
cout << endl;
return 0;
}


使用swap函数时要注意是否需要自赋值比较,如果i和j可能相等,则在使用第二

个版本的swap函数时一定要比较i和j,在第一个版本的swap函数中加入比较语

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