插入排序、归并排序
2011-11-29 09:05
274 查看
/*插入排序*/
#define LEN 5
int a[LEN] = {10, 5, 2, 4, 7};
void insertion_sort(void)
{
int i, j, k;
for(j = 1; j < LEN; j++)
{
k = a[j];
i = j - 1;
while(i >= 0 && a[i] > k)
{
a[i+1] = a[i];
--i;
}
a[i+1] = k;
}
}
///////////////////////////////////////////////
/*归并排序*/
int a[8] = {5, 2, 4, 7, 1, 3, 2, 6};
void merge(int start, int mid, int end)
{
int n1 = mid - start + 1;
int n2 = end - mid;
int left[n1], right[n2];
int i, j, k;
for(i = 0; i < n1; +i)
left[i] = a[start+i];
for(j = 0; j < n2; ++j)
right[j] = a[mid+1+j];
i = j = 0;
for(k = start; i < n1 && j < n2; ++k)
{
if(left[i] < right[j])
{
a[k] = left[i];
++i;
}
else
{
a[k] = right[j];
++j;
}
}
if (i < n1)
{
for(; i < ni; ++i)
{
a[k] = left[i];
++k;
}
}
if(j < n2)
{
for(; j < n2; ++j)
{
a[k] = right[j];
++k;
}
}
}
void sort(int start, int end)
{
int mid;
if(start < end)
{
mid = (start + end)/2;
sort(start, mid);
sort(mid+1, end);
merge(start, mid, end);
}
}
////////////////////////////////////////////
#define LEN 5
int a[LEN] = {10, 5, 2, 4, 7};
void insertion_sort(void)
{
int i, j, k;
for(j = 1; j < LEN; j++)
{
k = a[j];
i = j - 1;
while(i >= 0 && a[i] > k)
{
a[i+1] = a[i];
--i;
}
a[i+1] = k;
}
}
///////////////////////////////////////////////
/*归并排序*/
int a[8] = {5, 2, 4, 7, 1, 3, 2, 6};
void merge(int start, int mid, int end)
{
int n1 = mid - start + 1;
int n2 = end - mid;
int left[n1], right[n2];
int i, j, k;
for(i = 0; i < n1; +i)
left[i] = a[start+i];
for(j = 0; j < n2; ++j)
right[j] = a[mid+1+j];
i = j = 0;
for(k = start; i < n1 && j < n2; ++k)
{
if(left[i] < right[j])
{
a[k] = left[i];
++i;
}
else
{
a[k] = right[j];
++j;
}
}
if (i < n1)
{
for(; i < ni; ++i)
{
a[k] = left[i];
++k;
}
}
if(j < n2)
{
for(; j < n2; ++j)
{
a[k] = right[j];
++k;
}
}
}
void sort(int start, int end)
{
int mid;
if(start < end)
{
mid = (start + end)/2;
sort(start, mid);
sort(mid+1, end);
merge(start, mid, end);
}
}
////////////////////////////////////////////
相关文章推荐
- 算法导论:插入排序和归并排序
- 常见排序集合(冒泡排序,选择排序,直接插入排序,二分插入排序,快速排序,希尔排序,归并排序)
- 插入排序、选择排序、交换排序和归并排序
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- java实现七种排序 (插入排序, 希尔排序, 插入排序, 快速排序, 简单选择排序, 堆排序, 归并排序)
- 直接插入排序、归并排序、推排序、快速排序
- 八大排序算法:简单插入排序、冒泡排序、希尔排序、快速排序、堆排序、归并排序等总结。
- 《算法导论》学习笔记之Chapter 2-2.1,2.2,2.3插入排序,选择排序,归并排序
- 插入排序,归并排序,快速排序时间效率测试
- 算法导论:第一讲:插入排序和归并排序
- c++ 模板实现 -- 直接插入排序和归并排序
- 插入排序及归并排序java代码实现及详细注释
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——JAVA实现
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
- java五种内部排序(直接插入排序、希尔排序、快速排序、堆排序、归并排序)
- 比较排序总结——直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序
- 排序算法(堆排序,归并排序,快速排序、选择排序、直接插入排序)
- 插入排序和归并排序
- 算法导论第三版--插入排序和归并排序
- 插入排序、交换排序、选择排序、归并排序、基数排序