c++ 常用排序

冒泡排序(Bubble Sort):

比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

int main() {


    int array[10] = {2,3,1,4,5,8,6,9,0,7};


    for (int i = 0; i <9 ; ++i) {
        for (int j = 0; j <10-i-1 ; ++j) {

            if (array[j]>array[j+1]){
                array[j] ^=array[j+1];
                array[j+1] ^=array[j];
                array[j] ^=array[j+1];
            }
        }
    }



    for (int k = 0; k <10 ; ++k) {
        std::cout<<array[k]<<" ";
    }




    return 0;
}

直接插入排序:

#include <iostream>

void swap(int array[],int size){
    
    for (int i = 1; i <size ; ++i) {
        for (int j = i; j >0 ; --j) {
            if (array[j]>array[j-1])
            {

                array[j]   ^= array[j-1];
                array[j-1] ^= array[j];
                array[j]   ^= array[j-1];
            }
        }
    }
}

int main() {

    int array[5] = {2,3,1,4,5};
    swap(array,5);
    for (int k = 0; k <5 ; ++k) {
        std::cout<<array[k]<<" ";
    }
    return 0;
}

堆排序:

/*
 * 堆排序的时间复杂度最好到最坏都是O(nlogn),较多元素的时候效率比较高
 */

void Heapify(int array[],int first,int end){

    int father = first;
    int son = father * 2 + 1;
    while(son<end){
        if(son + 1< end && array[son]<array[son+1]) ++son;
        //如果父节点大于子节点则表示调整完毕
        if (array[father] > array[son])break;
        else
        {
            //不然就交换父节点和字节点的元素
            array[father] ^= array[son];
            array[son] ^=array[father];
            array[father] ^=array[son];

            //父和子节点变成下一个要比较的位置
            father = son;
            son = 2 * father+1;
        }
    }
}

void HeapSort(int array[],int len){
    int i;
    //初始化堆,从最后一个父节点开始
    for (i = len/2-1; i>=0;--i) {
        Heapify(array,i,len);
    }
    //从堆中取出最大的元素在调整堆
    for (i= len-1;i>0;--i) {
        array[i] ^=array[0];
        array[0] ^=array[i];
        array[i] ^=array[0];

        //调整成堆
        Heapify(array,0,i);
    }

}


int main() {
int array[10] = {2,3,1,4,5,8,6,9,0,7}; HeapSort(array,10); for (int k = 0; k <10 ; ++k) { std::cout<<array[k]<<" "; } return 0; }
原文地址:https://www.cnblogs.com/NigelX/p/6520174.html