排序、查找算法

版权声明:转载请私信 https://blog.csdn.net/sunflower_sara/article/details/81741927

排序算法

排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复杂性
直接插入排序 O(n2) O(n2) O(n) O(1) 稳定 简单
希尔排序 O(nlog2n) O(n2) O(n) O(1) 不稳定 较复杂
直接选择排序 O(n2) O(n2) O(n2) O(1) 不稳定 简单
堆排序 O(nlog2n) O(nlog2n) O(nlog2n) O(1) 不稳定 较复杂
冒泡排序 O(n2) O(n2) O(n) O(1) 稳定 简单
快速排序 O(nlog2n) O(n2) O(nlog2n) O(nlog2n) 不稳定 较复杂
归并排序 O(nlog2n) O(nlog2n) O(nlog2n) O(n) 稳定 较复杂
基数排序 O(d(n+r)) O(d(n+r)) O(d(n+r)) O(n+r) 稳定 较复杂

 

https://www.cnblogs.com/onepixel/articles/7674659.html

http://www.cnblogs.com/eniac12/p/5329396.html

https://www.cnblogs.com/angelye/p/7508292.html

快排https://www.cnblogs.com/yangecnu/p/Introduce-Quick-Sort.html

 

快排

//a:待排序数组,low:最低位的下标,high:最高位的下标
void quickSort(int a[],int low, int high)
{
    if(low>=high)
    {
        return;
    }
    int left=low;
    int right=high;
    int key=a[left];    /*用数组的第一个记录作为分区元素*/
    while(left!=right){
        while(left<right&&a[right]>=key)    /*从右向左扫描,找第一个码值小于key的记录,并交换到key*/
            --right;
        a[left]=a[right];
        while(left<right&&a[left]<=key)
            ++left;
        a[right]=a[left];    /*从左向右扫描,找第一个码值大于key的记录,并交换到右边*/
    }
    a[left]=key;    /*分区元素放到正确位置*/
    quickSort(a,low,left-1);
    quickSort(a,left+1,high);
}
 

 

希尔排序

增量+直接插入排序

 

 

查找算法

七大查找算法

https://www.cnblogs.com/yw09041432/p/5908444.html

 

 

二叉查找树(Binary Search Tree,BST)

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html

 

平衡查找树之2-3树

http://www.cnblogs.com/yangecnu/p/Introduce-2-3-Search-Tree.html

 

平衡查找树之红黑树

http://www.cnblogs.com/yangecnu/p/Introduce-Red-Black-Tree.html

 

平衡查找树之B树

https://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html

 

哈希

http://www.cnblogs.com/yangecnu/p/Introduce-Hashtable.html

 

展开阅读全文

没有更多推荐了,返回首页