//二分查找排序
#include "sort.h"
static int binarysearch(int data[], int len, int d)
{
int l = 0;
int h = len - 1;
int m;
{
int l = 0;
int h = len - 1;
int m;
while(l <= h)
{
m = (h + l) / 2;
{
m = (h + l) / 2;
if(data[m] > d)
{
h = m - 1;
}
else
{
l = m + 1;
}
}
{
h = m - 1;
}
else
{
l = m + 1;
}
}
return l;
}
}
int binarysearch_sort(int data[], int len)
{
int i, j;
int n;
int x;
{
int i, j;
int n;
int x;
for(i = 1; i < len; i++)
{
x = data[i];
n = binarysearch(data, i, data[i]);
for(j = i - 1; j >= n; j--)
{
data[j + 1] = data[j];
}
data[n] = x;
}
{
x = data[i];
n = binarysearch(data, i, data[i]);
for(j = i - 1; j >= n; j--)
{
data[j + 1] = data[j];
}
data[n] = x;
}
return 0;
}
//二分排序
}
//二分排序
#include "sort.h"
int binarysort(int data[], int len)
{
int i, j;
int x;
{
int i, j;
int x;
for (i = 1; i < len; i++)
{
x = data[i];
for (j = i - 1; j >= 0 && x < data[j]; j--)
{
data[j + 1] = data[j];
}
data[j + 1] = x;
}
{
x = data[i];
for (j = i - 1; j >= 0 && x < data[j]; j--)
{
data[j + 1] = data[j];
}
data[j + 1] = x;
}
return 0;
}
}
//merge排序
#include "sort.h"
int merge(int data1[], size_t len1, int data2[], size_t len2, int data[])
{
int i = 0;
int j = 0;
int k = 0;
int buf[len1 + len2];
{
int i = 0;
int j = 0;
int k = 0;
int buf[len1 + len2];
while(i < len1 && j < len2)
{
if(data1[i] < data2[j])
{
buf[k] = data1[i];
k++;
i++;
}
else
{
buf[k] = data2[j];
k++;
j++;
}
}
{
if(data1[i] < data2[j])
{
buf[k] = data1[i];
k++;
i++;
}
else
{
buf[k] = data2[j];
k++;
j++;
}
}
while(i < len1) buf[k++] = data1[i++];
while(j < len2) buf[k++] = data2[j++];
while(j < len2) buf[k++] = data2[j++];
for(i = 0;i < len1 + len2; i++)
data[i] = buf[i];
data[i] = buf[i];
return 0;
}
}
int mergerescution(int data[], size_t len)
{
int a = len / 2;
if(len == 1)
return 0;
{
int a = len / 2;
if(len == 1)
return 0;
mergerescution(data, a);
mergerescution(data + a, len - a);
mergerescution(data + a, len - a);
merge(data, a, data + a, len - a, data);
return 0;
}
}
int mergesort(int data[], int len)
{
int gap = 1;
int i;
while(gap < len)
{
for (i = 0; i <= len - gap * 2; i += gap * 2)
{
merge(data + i, gap, data + i + gap, gap, data + i);
}
{
int gap = 1;
int i;
while(gap < len)
{
for (i = 0; i <= len - gap * 2; i += gap * 2)
{
merge(data + i, gap, data + i + gap, gap, data + i);
}
if ((len - i) > gap)
{
merge(data + i, gap, data + i + gap, len - i - gap, data + i);
}
gap = gap * 2;
}
return 0;
}
{
merge(data + i, gap, data + i + gap, len - i - gap, data + i);
}
gap = gap * 2;
}
return 0;
}
//希尔排序
#include "sort.h"
int sort_shell(int data[], size_t len)
{
int gap = len;
int i, j;
{
int gap = len;
int i, j;
while ((gap = gap / 2) > 0)
{
{
for (i = 0; i < len - gap; i++)
{
for (j = i + gap; j >= gap; j -= gap)
{
if (data[j] < data[j - gap])
{
SWAP(data[j], data[j - gap]);
}
}
}
}
{
for (j = i + gap; j >= gap; j -= gap)
{
if (data[j] < data[j - gap])
{
SWAP(data[j], data[j - gap]);
}
}
}
}
return 0;
}
}