#include <stdio.h>
#include <time.h>
#include <stdlib.h>
typedef int TYPE;
#define N 100000
void exchange(TYPE A[], int a, int b){TYPE tmp = A[a]; A[a] = A[b]; A[b] = tmp;}
void selectionSort(TYPE A[], int n)
{
int i, j, minIndex;
for(i = 0; i < n-1; ++i)
{
minIndex = i;
for(j = i+1; j < n; ++j)
if(A[j] < A[minIndex])
minIndex = j;
exchange(A, i, minIndex);
}
}
void insertionSort(TYPE A[], int n)
{
int i, j; TYPE key;
for(i = 1; i < n; ++i){
key = A[i];
j = i-1;
while(j>=0 && A[j] > key){
A[j+1] = A[j];
--j;
}
A[j+1] = key;
}
}
void insertionSortInterval(TYPE A[], int start, int increment, int n)
{
int i, j;TYPE key;
for(i = start + increment; i < n; i+=increment)
{
key = A[i];
j = i - increment;
while(j >= start && A[j] > key)
{
A[j+increment] = A[j];
j -= increment;
}
A[j+increment] = key;
}
}
void shellSort(TYPE A[], int n)
{
int increment = n, start;
while(increment > 1)
{
increment = increment/3+1;
for(start = 0; start < increment; ++start){
insertionSortInterval(A, start, increment, n);
}
}
}
void insertionSortNonincreasing(TYPE A[], int n)
{
int i, j; TYPE key;
for(i = 1; i < n; ++i){
key = A[i];
j = i-1;
while(j>=0 && A[j] < key)
{
A[j+1] = A[j];
--j;
}
A[j+1] = key;
}
}
int main()
{
clock_t s, e;
int A[N],B[N], i;
srand(time(NULL));
for(i = 0; i < N; ++i)B[i] = A[i] = rand() % 100;
s = clock();
shellSort(B, N);
e = clock();
printf("shellSort : %f\n", (double)(e-s)/CLOCKS_PER_SEC);
s = clock();
insertionSort(A, N);
e = clock();
printf("insertionSort: %f\n", (double)(e-s)/CLOCKS_PER_SEC);
/*
shellSort : 0.022946
insertionSort: 10.055960
*/
//insertionSort(A, N);
//insertionSortNonincreasing(A, N);
//selectionSort(A, N);
/* for(i = 0 ; i < N; ++i)
{
printf("%d ", A[i]);
if((i+1)%10==0) printf("\n");
}
*/
}
希尔shell排序
最新推荐文章于 2023-05-29 11:43:48 发布