排序算法
来源:互联网 发布:网络活动策划书 编辑:程序博客网 时间:2024/06/06 09:33
堆排序:
与归并排序一样,但不同于插入排序的是,堆排序的时间复杂度为O(n*lgn);
而与插入排序一样,不同于归并排序的是,堆排序具有空间原址性。
因此,堆排序集合了归并排序与插入排序的优点。
算法导论上的代码:
HeapSort.h
#define PARENT(i) (i-1)/2#define LEFTCHILD(i) i*2+1#define RIGHTCHILD(i) (i+1)*2void max_heapify(int* arr, int i);void build_max_heap(int* arr, int num);void heapSort(int* arr, int heapSize);void max_heapify(int* arr, int i, int heapSize){if (i > (heapSize / 2 - 1)) return;int largestIndex = i;if (arr[i] < arr[LEFTCHILD(i)])largestIndex = LEFTCHILD(i);if (RIGHTCHILD(i) <= heapSize-1 && arr[largestIndex] < arr[RIGHTCHILD(i)])largestIndex = RIGHTCHILD(i);if (largestIndex != i) //若largestIndex == i,说明以i为根的子树已经满足最大堆得性质了。{int temp = arr[largestIndex];arr[largestIndex] = arr[i];arr[i] = temp;max_heapify(arr, largestIndex, heapSize); //此时,以largestIndex为根节点的子树未必满足最大堆性质,所以递归调用。}}void build_max_heap(int* arr, int heapSize){for (int i = (heapSize / 2 - 1); i >= 0; --i){max_heapify(arr, i, heapSize);}}void heapSort(int* arr, int heapSize){build_max_heap(arr, heapSize);for (int i = 1; i < heapSize; ++i){int temp = arr[0];arr[0] = arr[heapSize - i];arr[heapSize - i] = temp;max_heapify(arr, 0, heapSize-i);}}
快速排序:
一种最坏情况时间复杂度为O(n*n)的排序算法。但是快排通常是实际排序应用中最好的选择,因为它的平均性能好:期望时间复杂度为O(n*lgn),且隐含的常数因子非常小,同时也能进行原址排序。
QuickSort.h
int partition(int* arr, int p, int r); int quickSort(int* arr, int p, int r); int partition(int* arr, int p, int r){int cmp = arr[r];int j = p - 1;for (int i = p; i < r; ++i){if (arr[i] < cmp){j++;if (i != j){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}arr[r] = arr[j + 1];arr[j + 1] = cmp;return j + 1;}int quickSort(int* arr, int p, int r){if (p < r){int q = partition(arr, p, r);quickSort(arr, p, q - 1);quickSort(arr, q + 1, r);}return 0;}
0 0
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- js处理json数组
- eclipse中ant的安装
- Material Design学习(三)
- [精]Oracle 内存结构详解
- 设计模式-适配器模式
- 排序算法
- 调试器工作原理(1):基础篇
- 机器学习之——归一化线性回归与归一化逻辑回归
- js 弹出确认 取消对话框
- hibernate之实体粒度设计
- hdu 1688 Sightseeing
- @RequestParam @RequestBody @PathVariable
- CodeForces 668C Little Artem and Random Variable(数学)
- Maven项目有工程报错,但是不影响运行