其他三种排序:堆排序,归并排序,快速排序
来源:互联网 发布:魔兽数据库2.43 编辑:程序博客网 时间:2024/06/08 10:26
//交换函数
void swap (int a[],int i,int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
//打印函数
void printA (int *a,int len)
{
int i;
for (i = 0; i < len; i++)
{
printf (“%-4d”,a[i]);
}
printf (“\n”);
}
//堆排序主函数
void heapify (int *a, int i, int len)
{
int left = 2 * i + 1;
int right = 2 * i + 2;
int max = i;
if (left < len && a[left] > a[max]) max = left;if (right < len && a[right] > a[max]) max = right;if (max != i){ swap (a, i, max); heapify (a, max ,len);}
}
void heapSort (int *a, int len)
{
int i;
for (i = len/2 - 1; i >= 0; i–)
{
heapify (a, i, len);
}
for (i = len-1; i > 0; i--){ swap (a, 0, i); len--; heapify (a, 0, len);}
}
//归并函数主函数,a 是数组,tmp 是缓冲区
void merge (int *a, int left, int mid, int right, int *tmp)
{
int i = left;
int j = mid + 1;
int k = 0;
}
void mergeSort (int *a,int left,int right,int *tmp)
{
if (left >= right)
return;
int mid = (left + right)/2;mergeSort (a,left,mid,tmp); //对左边进行排序mergeSort (a,mid+1,right,tmp); //对右边进行排序merge (a,left,mid,right,tmp); //将左右归并
}
//归并排序
int main()
{
int a[10] = {9,2,1,5,4,7,6,3,8,0};
int len = sizeof(a)/sizeof(a[0]);
int tmp[10];mergeSort (a,0,len-1,tmp);printA (a,len);return 0;
}
int partition (int *a,int left,int right) //快速排序主函数
{
int pivot = a[right];
int index = left; //若找到比基准值小的元素,交换
int i;
for (i = left;i < right; i++){ if (a[i] < pivot) { swap (a,i,index); index++; }}swap (a,index,right);return index;
}
void qSort (int *a,int left,int right)
{
if (left < right)
{
int pivot = partition (a,left,right); //对分区进行操作,找基准值下标
qSort (a,left,pivot-1);
qSort (a,pivot+1,right); //对左右分区进行操作
}
}
//快速排序
int main()
{
int a[10] = {9,2,1,0,4,7,6,3,8,5};
int len = sizeof(a)/sizeof(a[0]);
qSort (a,0,len-1);printA (a,len);return 0;
}
- 其他三种排序:堆排序,归并排序,快速排序
- 三种排序算法(归并排序、快速排序,堆排序)
- 三大排序算法(快速排序,归并排序,堆排序)
- 排序(三)堆排序、归并排序、快速排序
- O(lgn)的三种排序,快速排序、归并排序、堆排序
- 快速排序、堆排序、归并排序
- 快速排序、堆排序、归并排序
- 快速排序、归并排序、堆排序
- 快速排序、堆排序、归并排序
- 快速排序、堆排序、归并排序
- 归并排序、快速排序、堆排序
- 堆排序、归并排序、快速排序总结
- 归并排序、堆排序、快速排序
- 插入排序、希尔排序、堆排序、归并排序、快速排序
- 排序之选择排序、堆排序、归并排序、快速排序
- 排序(希尔排序,堆排序,归并排序,快速排序)
- 三大面试排序的归并以及递归实现--快速排序、归并排序、堆排序
- 七种排序算法,包括:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序
- Visual studio Community 2017安装初体验
- Google算法题:最大可分子集
- 多表查询----合并查询
- cmd运行javac 报告javac不是内部或外部命令,运行java、java-version正常
- WebRTC原生开发和混合开发优缺点分析对比
- 其他三种排序:堆排序,归并排序,快速排序
- Netty之解决TCP粘包拆包(自定义协议)
- C# 调试(上) 预处理指令
- UVA1218PerfectService
- 笨办法学 Python · 续 练习 14:双链表
- 朴素贝叶斯
- leetcode:interleaving string
- 三层架构MVC
- UVA10537