//直接插入排序
void InsertSort(int a[], int length)
{
int i,j;
int temp;
for(i = 1; i<length; ++i)
{
j = i - 1;
temp = a[i];
while(j>=0 && a[j]>temp)
{
a[j+1] = a[j];
--j;
}
a[j+1] = temp;
}
}
//希尔排序
void ShellSort(int a[], int length)
{
int i,j;
int temp;
for(int k = length/2; k >= 1; k/=2)
{
for(i = k; i< length; ++i)
{
j = i - k;
temp = a[i];
while(j >= 0 && a[j] > temp)
{
a[j+k] = a[j];
j-=k;
}
a[j+k] = temp;
}
}
}
//冒泡排序
void BubbleSort(int a[], int length)
{
int i,j;
int temp;
for(j = length - 1; j > 0; --j)
{
for(i = 0; i < j; ++i)
{
if(a[i] > a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}
}
//快速排序
void QuickSort(int a[], int length)
{
if(a == NULL || length <= 1)
return;
int start = 0, end = length - 1;
int val = a[0];
while(start < end)
{
for(;start<end;--end)
{
if(a[end]<val)
{
a[start] = a[end];
break;
}
}
for(;start<end;++start)
{
if(a[start]>val)
{
a[end] = a[start];
break;
}
}
}
a[start] = val;
QuickSort(a, start);
QuickSort(a+start+1, length-start-1);
}
//直接选择排序
void StraightSelectSort(int a[], int length)
{
int i,j;
int min, min_pos;
for(i = 0; i< length; ++i)
{
min = a[i];
min_pos = i;
for(j = i+1; j<length;++j)
{
if(a[j]<min)
{
min = a[j];
min_pos = j;
}
}
a[min_pos] = a[i];
a[i] = min;
}
}
//堆排序
void HeapAdjust(int a[], int pos, int length)
{
int child = 2 * pos + 1;
int temp;
for(int p = pos; child<length; child = 2 * p + 1)
{
if((child+1)<length && a[child+1]>a[child])
++child;
if(a[p]<a[child])
{
temp = a[p];
a[p] = a[child];
a[child] = temp;
}
else
break;
p = child;
}
}
void HeapSort(int a[], int length)
{
int n = (length - 1)/2;
for(;n>=0;--n)
{
HeapAdjust(a,n,length);
}
while(length>1)
{
int temp = a[0];
a[0] = a[length - 1];
a[length - 1] = temp;
--length;
HeapAdjust(a,0,length);
}
}
//归并排序
void MergeArray(int list1[], int list1_size, int list2[], int list2_size)
{
int *list = (int*)malloc((list1_size + list2_size)*sizeof(int));
int list1_index = 0;
int list2_index = 0;
int list_index = 0;
while(list1_index<list1_size && list2_index<list2_size)
{
if(list1[list1_index]<list2[list2_index])
list[list_index++] = list1[list1_index++];
else
list[list_index++] = list2[list2_index++];
}
while(list1_index<list1_size)
{
list[list_index++] = list1[list1_index++];
}
while(list2_index<list2_size)
{
list[list_index++] = list2[list2_index++];
}
for(int i = 0; i <list1_size+list2_size; i++)
{
list1[i] = list[i];
}
}
void MergeSort(int a[], int length)
{
if(a == NULL || length <= 1)
return;
int list1_size = length/2;
int list2_size = length - list1_size;
MergeSort(a,list1_size);
MergeSort(a+list1_size, list2_size);
MergeArray(a,list1_size,a+list1_size, list2_size);
}
【技术体系框架】排序算法
最新推荐文章于 2024-04-19 03:15:00 发布