c语言随机函数排序 随机快速排序c语言( 二 )


{
int i;
int n;
int j;
int temp;
n = x;
for(i = 1; in; i++)
{
temp = a[i];
j = i - 1;
while(tempa[j]j = 0)
{
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;
}
}
static void shellsort(int a[], int d, int x)
{
int i;
int j;
int n;
int temp;
n = x;
for(i = d; in; i += d)
{
temp = a[i];
j = i - d;
while(a[j]tempj = 0)
{
a[j + d] = a[j];
j -= d;
}
a[j + d] = temp;
}
}
extern void shell(int a[], int x) //希尔排序
{
int n;
int d;
n = x;
d = n / 2;
while(d0)
{
shellsort(a, d, n);
d /= 2;
}
}
extern void bubble(int a[], int x) //冒泡排序
{
int ischange;
int i;
int j;
int n;
n = x;
for(i = n - 1; i0; i--)
{
ischange = 0;
for(j = 0; ji; j++)
{
if(a[j + 1]a[j])
{
a[j + 1] += a[j];
a[j] = a[j + 1] - a[j];
a[j + 1] = a[j + 1] - a[j];
ischange = 1;
}
}
if(0 == ischange)
{
break;
}
}
}
static int partion(int a[], int left, int right)
{
int l;
int r;
int priv;
l = left;
r = right;
priv = a[l];
while(lr)
{
while(a[r]privrl)
r--;
if(lr)
{
a[l++] = a[r];
}
while(a[l]privrl)
l++;
if(lr)
{
a[r--] = a[l];
}
}
a[l] = priv;
return l;
}
static void quicksort(int a[], int left, int right)
{
int l;
int r;
int priv;
l = left;
r = right;
if(lr)
{
priv = partion(a, l, r);
quicksort(a, l, priv - 1);
quicksort(a, priv + 1, r);
}
}
extern void quick(int a[], int n) //快速排序
{
int l;
int r;
l = 0;
r = n - 1;
quicksort(a, l, r);
}
extern void selec(int a[], int x) //选择排序
{
int i;
int j;
int k;
int n;
n = x;
for(i = 0; in; i++)
{
k = i;
for(j = i; jn; j++)
{
if(a[j]a[k])
{
k = j;
}
}
if(i != k)
{
a[i] += a[k];
a[k] = a[i] - a[k];
a[i] -= a[k];
}
}
}
static void mergearray(int a[], int first, int mid, int last, int p[])
{
int i;
int j;
int k;
i = first;
j = mid + 1;
k = 0;
while(i = midj = last)
{
if(a[i] = a[j])
{
p[k++] = a[i++];
}
else
{
p[k++] = a[j++];
}
}
while(i = mid)
{
p[k++] = a[i++];
}
while(j = last)
{
p[k++] = a[j++];
}
for(i = 0; ik; i++)
{
a[first + i] = p[i];
}
}
static void mergesort(int a[], int first, int last, int p[])
{
int mid;
if(lastfirst)
{
mid = first + (last - first) / 2;
mergesort(a, first, mid, p);
mergesort(a, mid + 1, last, p);
mergearray(a, first, mid, last, p);
}
}
extern void merge(int a[], int n) 归并排序
{
int *p;
p = (int *)malloc(n * sizeof(int));
if(!p)
{
perror("malloc");
exit(-1);
}
mergesort(a, 0, n - 1, p);
free(p);
}
static void swap(int data[], int a, int b)
{
data[a] ^= data[b];
data[b] ^= data[a];
data[a] ^= data[b];
}
static void siftup(int data[], int n) // create heap
{
int i;
int p;
for(i = n; i1data[p = i / 2]data[i]; i = p)
swap(data, p, i);
}
static void siftdown(int data[], int n) // adjust heap
{

推荐阅读