#include <iostream>
#include <utility>
#include <CL/cl.hpp>
#include "tool.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
#define WIDTH 640
#define HEIGHT 480
void MaxifyHeap(int A[],int ind,int len)
{
int left = ind*2+1;
int right = left +1;
int max_ind = ind;
while(right<=len){
if(A[left]< A[max_ind] && A[right]< A[max_ind]){
break;
}
else if( A[left]< A[right] ){
swap(A[max_ind],A[right]);
max_ind = right;
}
else {
swap(A[max_ind],A[left]);
max_ind = left;
}
left = max_ind*2+1;
right = left +1;
}
}
void HeapBuild(int A[],int size){
for(int i = (size-1)/2 ; i>= 0;i--){
MaxifyHeap( A, i, size-1);
}
}
void HeapSort(int A[],int size){
HeapBuild( A , size);
for(int i = size-1;i> 0;i--){
swap(A[0],A[i]);
MaxifyHeap( A, 0 , i-1);
}
}
int partition(int A[],int start , int end ,int pivot_ind){
int pivot = A[pivot_ind] ;
swap(A[pivot_ind],A[end]);
int ind = start;
for(int i = start;i < end;i++){
if(A[i]<pivot ){
swap(A[i],A[ind++]);
}
}
swap(A[ind],A[end]);
return ind;
}
void qSort(int A[],int start,int end ){
if(start >= end){
return;
}
int pivot_ind = start;
int mid = partition( A,start,end,pivot_ind);
//cout<<"mid = "<<mid<<endl;
qSort( A, start,mid-1 );
qSort( A, mid+1 , end );
}
int main(){
int A[10000]= {1,22,3,4,5,6,7,1,2,3,4,2,2,1,1,1,1,1,1,1,121,124,88,8,8,2};
int B[10000]= {1,22,3,4,5,6,7,1,2,3,4,2,2,1,1,1,1,1,1,1,121,124,88,8,8,2};
int size = sizeof(A)/sizeof(int);
for(int i =0 ;i<size;i++ )
{
A[i]=rand()*255;
B[i]=rand()*255;
}
float start = clock();
qSort( A, 0,size-1 );
cout<<"qSort Time = "<<clock()-start <<endl;
start = clock();
HeapSort( B, size );
cout<<"HeapSort Time = "<<clock()-start <<endl;
#include <utility>
#include <CL/cl.hpp>
#include "tool.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
#define WIDTH 640
#define HEIGHT 480
void MaxifyHeap(int A[],int ind,int len)
{
int left = ind*2+1;
int right = left +1;
int max_ind = ind;
while(right<=len){
if(A[left]< A[max_ind] && A[right]< A[max_ind]){
break;
}
else if( A[left]< A[right] ){
swap(A[max_ind],A[right]);
max_ind = right;
}
else {
swap(A[max_ind],A[left]);
max_ind = left;
}
left = max_ind*2+1;
right = left +1;
}
}
void HeapBuild(int A[],int size){
for(int i = (size-1)/2 ; i>= 0;i--){
MaxifyHeap( A, i, size-1);
}
}
void HeapSort(int A[],int size){
HeapBuild( A , size);
for(int i = size-1;i> 0;i--){
swap(A[0],A[i]);
MaxifyHeap( A, 0 , i-1);
}
}
int partition(int A[],int start , int end ,int pivot_ind){
int pivot = A[pivot_ind] ;
swap(A[pivot_ind],A[end]);
int ind = start;
for(int i = start;i < end;i++){
if(A[i]<pivot ){
swap(A[i],A[ind++]);
}
}
swap(A[ind],A[end]);
return ind;
}
void qSort(int A[],int start,int end ){
if(start >= end){
return;
}
int pivot_ind = start;
int mid = partition( A,start,end,pivot_ind);
//cout<<"mid = "<<mid<<endl;
qSort( A, start,mid-1 );
qSort( A, mid+1 , end );
}
int main(){
int A[10000]= {1,22,3,4,5,6,7,1,2,3,4,2,2,1,1,1,1,1,1,1,121,124,88,8,8,2};
int B[10000]= {1,22,3,4,5,6,7,1,2,3,4,2,2,1,1,1,1,1,1,1,121,124,88,8,8,2};
int size = sizeof(A)/sizeof(int);
for(int i =0 ;i<size;i++ )
{
A[i]=rand()*255;
B[i]=rand()*255;
}
float start = clock();
qSort( A, 0,size-1 );
cout<<"qSort Time = "<<clock()-start <<endl;
start = clock();
HeapSort( B, size );
cout<<"HeapSort Time = "<<clock()-start <<endl;
}
输出:qSort Time = 1482
HeapSort Time = 1935
按 <RETURN> 来关闭窗口...