
经典排序算法
GoJawee
这个作者很懒,什么都没留下…
展开
-
二路归并排序
递归实现二路归并排序思想: 先分割(分割实际上是递归调用的过程) 全部分割后,在进行归并(归并实际上是两个数组进行排序的过程)#include <stdio.h>#include <stdlib.h>void Merge(int a[], int low, int mid, int high){ //将两个有序的子区间a[low, mid]和a[mid+1, high]归原创 2017-09-07 12:24:35 · 379 阅读 · 0 评论 -
快速排序
时间复杂度:O(nlgn)~O(n^2)空间复杂度:注意点:(1)递归调用的区间:[l,pivot-1],[pivot+1,r](2)加上等于号,可以排序有重复值的数组 A[low]<=key A[high]>=key int partition(int A[], int low, int high){ int key = A[low]; //key是基准原创 2017-09-07 23:07:14 · 305 阅读 · 0 评论 -
插入排序,希尔排序
时间复杂度 空间复杂度插入排序 O(N^2) O(1)希尔排序 O(N^1.3)~O(N^2) O(1)#include<stdio.h>void insert(int arr[], int n){ for (int i = 1; i < n; i++) //2~N依次插入 { //原创 2017-09-07 18:59:40 · 233 阅读 · 0 评论 -
堆排序
时间复杂度:O(nlgn)空间复杂度:O(1)最关键的问题:创建大根堆关键:创建大根堆/*说明:堆排序是完全二叉树顺序存储的应用,存储在数组中。Q1:假设有N个结点进行堆排序,那么存储在数组中的下标是1~N,0下标不使用。 为什么用1~N,而不是用0~N-1下标呢?A1:(1)由父子结点的关系决定的 (2)还有一个重点应用:A[0]在向下调整 函数AdjustDown函数中原创 2017-09-07 20:31:53 · 358 阅读 · 0 评论