排序

文章目录

    • 冒泡排序(Bubble Sort)
    • 插入排序(Insertion Sort)
    • !快速排序(Quick Sort)!
    • !归并排序(Merge Sort)
    • 堆排序(Heap Sort)

冒泡排序(Bubble Sort)

BubbleSort(a):
    Repeat length(a)-1 times:
        For every i from 0 to length(a) - 2:
            If a[i] > a[i+1] then:
                 Swap a[i] and a[i+1]

冒泡排序以及三种优化
时间复杂度:O(n2),空间复杂度O(n)

插入排序(Insertion Sort)

Insertion-Sort(A,n):
	for j from 2 to n:
		insert key A[j] into the (already sorted) sub-array A[1,...,j-1] 
		by pairwiese key-swaps down to its right position

插入排序与冒泡排序的区别

!快速排序(Quick Sort)!

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

白话经典算法系列之六 快速排序 快速搞定

!归并排序(Merge Sort)

该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

Merge-Sort(A):
	1.if n=1,done(nothing to sort)
	2.Otherwise,recursively sort A[1...n/2] and A[n/2+1...n]
	3.Merge the two sorted subarrays

归并排序即其优化
归并操作的代码实现:

//将有序数组a[]和b[]合并到c[]中  
void MemeryArray(int a[], int n, int b[], int m, int c[])  
{  
    int i, j, k;  

    i = j = k = 0;  
    while (i < n && j < m)  
    {  
        if (a[i] < b[j])  
            c[k++] = a[i++];  
        else  
            c[k++] = b[j++];   
    }  

    while (i < n)  
        c[k++] = a[i++];  

    while (j < m)  
        c[k++] = b[j++];  
}  

时间复杂度O(nlogn)

堆排序(Heap Sort)

堆排序以及其应用大总结

你可能感兴趣的:(排序)