#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void ShellSort(int V[], int n){
int compcnt=0,movecnt=0;
int d=n, x, i, j,k;
while (d > 1){
d = d/2;
for (i=d; i<n; i++){
x = V[i];
j = i-d;
while (j >= 0 && V[j] > x){
compcnt++;
movecnt++;
V[j+d] = V[j];
j = j-d;
}
V[j+d] = x;
movecnt++;
}
}
printf("\nthe compcnt and movecnt of shellsort are %d and %d\n",compcnt,movecnt);
}
void QuickSort(int V[],int low, int high){
int i, j, x, k;
int compcnt=0,movecnt=0;
if (low <= high){
i=low+1; j=high; k=V[low];
while (i<j){
compcnt++;
while (low<j && V[j]>=k) j--;compcnt++;
while (i<high && V[i]<k) i++;compcnt++;
if (i<j){
movecnt++;
x=V[i]; V[i]=V[j]; V[j]=x;
}
}
if (low+1==high && V[low]<V[high]) j=low;
V[low]=V[j]; V[j]=k;
movecnt++;
QuickSort(V, low, j-1); QuickSort(V, j+1, high);
}
printf("the compcnt and movecnt of quicksort are %d and %d\n",compcnt,3*movecnt);
}
int main(){
int A[100],B[100],i;
srand(time(NULL));
for(i=0;i<100;i++){
A[i] = rand()%100;
B[i] = A[i];
printf("%d ",A[i]);
}
int n = sizeof(A)/sizeof(A[0]);
ShellSort(A,n);
printf("\n");
for(i=0;i<100;i++){
printf("%d ",A[i]);
}
QuickSort(B,0,n-1);
printf("\n");
for(i=0;i<100;i++){
printf("%d ",B[i]);
}
return 0;
}
网友评论