排序算法-C++實現:插入排序,冒泡排序

直接插入排序:
整個序列分爲有序區和無序區,取第一個元素作爲初始有序區,然後第二個開始,依次插入到有序區的合適位置,直到排好序

void InsertSort(int arr[],int n){
    //遍歷數組
    for(int i=1;i<=n;i++){
    //i-1是有序數組的長度,i是需要插入的元素
        for(int j=i;j>0;j--){
            if(arr[j]<arr[j-1]){
                int temp=arr[j];
                arr[j]=arr[j-1];
                arr[j-1]=temp;
            }//將第i個元素和有序區最後一個比較,若小於,則往前插入
        }
    }
}

冒泡排序:比較相鄰的元素,如果反序則交換,也分有序區和無序區,初始時,有序區爲空,所有元素都在無序區,經過第一趟後能找出最大的元素,然後重複

Void BubbleSort(int arr[],int n){
    //遍歷整個數組,注意i只能到n-2
    for(int i=0;i<n-1;i++){
        //除去前i次遍歷得到的最大值,i次遍歷得到一個最大值,在末尾
        for(int j=0;j<n-1-i;j++){
            //最大值交換到後面
            if(arr[j]>arr[j+1]){
                int temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
}

快速排序:首先選取一個軸值(pivot,基準值),將待排序記錄劃分成獨立的兩部分,左軸的元素小於軸值,右側的大於,然後遞歸,直到整個序列有序

void Qsort(int a[], int low, int high)
{
    if(low >= high)
    {
        return;
    }
    int first = low;
    int last = high;
    int key = a[first];/*用字表的第一個記錄作爲樞軸*/
    while(first < last)
    {
        while(first < last && a[last] >= key)
        {
            --last;
        }
        a[first] = a[last];/*將比第一個小的移到低端*/

        while(first < last && a[first] <= key)
        {
            ++first;
        }

        a[last] = a[first];    
/*將比第一個大的移到高端*/
    }
    a[first] = key;/*樞軸記錄到位*/
    Qsort(a, low, first-1);
    Qsort(a, first+1, high);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章