写一下快速排序和堆排序,两个简单又神奇的算法
2014-09-18 17:45
211 查看
快速排序
堆排序
void quick_sort(int array[], int begin, int end) { if(end > begin) { int pivot = begin; int last_small = begin; int i = end; while(last_small != i) { if(array[i] <= array[pivot]) { int temp = array[i]; array[i] = array[++last_small]; array[last_small] = temp; } else i--; } int tmp = array[pivot]; array[pivot] = array[last_small]; array[last_small] = tmp; quick_sort(array, begin, last_small - 1); quick_sort(array, last_small + 1, end); } }
堆排序
void adjust_heap(int[], int, int); void build_heap(int array[], int size)//build the max-heap { for(int i = size - 1; i >= 0; i--) { adjust_heap(array, size, i); } } void adjust_heap(int array[], int size, int element)//adjust the max-heap { int left = element * 2 + 1; int right = left + 1; while(right < size) { if(array[element] >= array[left] && array[element] >= array[right]) return; if(array[left] >= array[right]) { int tmp = array[left]; array[left] = array[element]; array[element] = tmp; element = left; } else { int tmp = array[right]; array[right] = array[element]; array[element] = tmp; element = right; } left = element * 2 + 1; right = left + 1; } if(left < size && array[left] > array[element]) { int tmp = array[left]; array[left] = array[element]; array[element] = tmp; } } void heap_sort(int array[], int size)//heap sort { build_heap(array, size); for(int i = size - 1; i > 0; i--) { int tmp = array[i]; array[i] = array[0]; array[0] = tmp; adjust_heap(array, i, 0); } }
相关文章推荐
- 两个简单数学问题的精巧算法
- 两个简单数学问题的精巧算法
- 二哥学算法之快速排序和堆排序
- 简单算法学习之快速排序详解
- 简单算法学习之快速排序
- 两个有序数组(有序段sorted run)简单归并算法的比较次数的分析
- 交换两个变量的值的两种简单算法
- 算法有插入排序,堆排序,合并排序,快速排序和stooge排序
- 简单排序算法之堆排序
- 一个非常简单的算法题是否愿意挑战一下呢
- 简单算法 - 用两个栈实现一个队列
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 简单排序算法实现——堆排序
- JAVA 两个简单的抽奖算法
- 采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。
- ZOJ 1298题解,想到算法就不难了,要求多米诺骨牌最后落下的位置。这是Dijkstra算法的简单应用。设立的几个关键点,都是从1开始倒比如只有两个点1 2,最后牌倒得位置是2
- 简单算法——快速排序
- 简单排序算法之快速排序
- 复习一下简单的排序算法之 快速排序
- 超简单小算法求圆面积(测多组数据及小用一下正则表达式)(入门)