其他三种排序:堆排序,归并排序,快速排序
2017-08-06 20:48
381 查看
//交换函数
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;
}
void heapSort (int *a, int len)
{
int i;
for (i = len/2 - 1; i >= 0; i–)
{
heapify (a, i, 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 main()
{
int a[10] = {9,2,1,5,4,7,6,3,8,0};
int len = sizeof(a)/sizeof(a[0]);
}
int partition (int *a,int left,int right) //快速排序主函数
{
int pivot = a[right];
int index = left; //若找到比基准值小的元素,交换
int i;
}
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]);
}
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)的三种排序,快速排序、归并排序、堆排序
- 常见比较排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- 排序算法: 冒泡排序, 快速排序,希尔排序,直接插入排序 ,直接选择排序,归并排序,堆排序
- 插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序
- 常用排序算法——插入排序,快速排序,归并排序,堆排序,计数排序
- 冒泡排序 快速排序 选择排序 堆排序 直接插入排序 希尔排序 归并排序
- 练习《算法导论》之排序:插入排序,归并排序,堆排序,快速排序
- 快速排序 归并排序 堆排序 希尔排序
- 常用的排序算法(快速排序、插入排序、希尔排序、堆排序、冒泡排序、选择排序、归并排序)
- 数据结构之排序算法二:堆排序,快速排序,归并排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 各类排序算法实现(堆排序、希尔排序、快速排序、归并排序等)
- 经典排序算法 -----冒泡排序,插入排序,快速排序,归并排序,堆排序
- 冒泡排序,快速排序,归并排序,选择排序,插入排序,堆排序
- 插入排序,快速排序,堆排序,归并排序