排序算法總結(C++實現)

在這裏插入代碼片# 排序算法總結(C++實現)

思想總結:

冒泡排序

對一個數組進行一趟遍歷,噹噹前遍歷的數字比後一個數字大的時候,兩數字交換,這樣遍歷一遍之後,會將最大的數字放置到數組的最後端;第二次,將倒數第二大的數字放到數組的倒數第二個位置,,,;遍歷arr.length次之後,就實現了從小到大的排序。

選擇排序

選擇排序的中心思想是將爲每一個位置選出合適的數字,仍舊遍歷數組,第一次遍歷時,選出最小的數字,即每次將當前遍歷得到的最小的數字的數組下標記錄下來,和之後的數字進行對比,最終得到數組中最小的數字的下標,之後將該數字與第一個數字進行交換;開始第二次遍歷,選出剩餘數字中最小的數字,放到第二個位置,,,;這樣遍歷arr.length次之後,就爲每一個位置選出了合適的數字。

插入排序

插入排序就是將數組分爲兩部分,前一部分爲已經排好序的數組,後一部分爲未排序的數組;從第一個數字開始,將第一個數字作爲已排好序的數組,選取排好序數組的下一個數字作爲待排序數字,與已經排好序的數組中的數字從後到前進行進行對比,若待排序數字小於所對比數字,則將該數字後移一位,指導待排序數字大於所選數字,停止往前對比,結束循環,將待排序數字放入該數字之後;然後選取下一個待排序數字,進行對比,,,,;最終將所有未排序數字排序完成即可。

快速排序

快速排序主要是應用遞歸的思想,在每一趟遍歷的時候,選取一個標準值,將數組不斷地分成大於標準值和小於標準值的兩部分,然後對着兩部分再進行遍歷,,,,;具體的實現方式是,每次遍歷取出第一個值作爲標準值,然後從後往前,將每個值與標準值進行對比,若該值大於等於標準值,則順序對比前一個值,直至對比完成,反之則結束循環,將該值存到之前標準值取值的位置(請記住這一點,因爲當你去取出標準值的時候,相當於此處爲空了,所以可以將該值放置到此處);然後再從前往後,將每個值與標準進行對比,做該值小於等於標準值,則順序對比後一個值,直至對比完成,反之則結束循環,將該值存到上一次從後往前對比時調整的數字位置,,,,;這樣一直進行循環,直至遍歷完每一個數字,最後結束遍歷之後,將標準值再存入數組中,此時標準值左側的數字全部小於標準值,右側的數字全部大於標準值;然後對這兩部分再次進行快速排序,,,,;
該算法的實現個人認爲較爲難與想象,建議手動取一個數組,在對數組進行手動模擬算法過程,以此來增強理解。

代碼實現如下


#include <iostream>

using namespace std;

class mySort
{
public:
    int arr[];


    /*冒泡排序*/
public:
    void Bubble_sort()
    {
        int a,b;
        int arr[100];
        cin>>a;
        for(int i=0;i<a;i++)
        {
            cin>>arr[i];
        }
        for(int i=0;i<a-1;i++)
        {
            for(int j=0;j<a-i-1;j++)
            {
                if(arr[j]>arr[j+1])
                {
                    b=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=b;
                }
            }
        }
        for(int i=0;i<a;i++)
            cout<<arr[i];
    }

    /*選擇排序*/
public:
    void Selection_sort()
    {
        int a,b,c=0,m;
        int arr[100];
        cin>>a;
        for(int i=0;i<a;i++)
        {
            cin>>arr[i];
        }
        for(int i=0;i<a;i++)
        {
            b=i;
            for(int j=i+1;j<a;j++)
            {
                if(arr[b]>arr[j])
                {
                    b=j;
                }
            }
            m=arr[b];
            arr[b]=arr[i];
            arr[i]=m;
        }
        for(int i=0;i<a;i++)
        {
            cout<<arr[i];
        }
    }

    /*插入排序*/
public:
    void Insertion_sort()
    {
        int a,b;
        int arr[100];
        cin>>a;
        for(int i=0;i<a;i++)
        {
            cin>>arr[i];
        }
        for(int i=0;i<a;i++)
        {
            int flag=arr[i+1];
            int j=i+1;
            while (flag<arr[j-1]&&j>0)
            {
                arr[j]=arr[j-1];
                j--;
            }
            arr[j]=flag;
        }
        for(int i=0;i<a;i++)
            cout<<arr[i];
    }


    /*快速排序*/
public:
    void Quick_sort(int arr[],int a,int b)
    {
        if(a>=b)
            return;
        int low=a,heigh=b;
        int key=arr[low];
        while(low<heigh)
        {
            while(low<heigh && arr[heigh]>=key)
                --heigh;
            arr[low] = arr[heigh];
            while (low<heigh && arr[low]<=key)
                ++low;
            arr[heigh] = arr[low];
        }
        arr[low] = key;
        Quick_sort(arr,a,low-1);
        Quick_sort(arr,low+1,b);
    }

};


int main()
{
    mySort a;
    //a.Bubble_sort();
    //a.Selection_sort();
    //a.Insertion_sort();

    int in;
    int arr[100];
    cin>>in;
    for(int i=0;i<in;i++)
    {
        cin>>arr[i];
    }
    a.Quick_sort(arr,0,in-1);
    for(int i=0;i<in;i++)
        cout<<arr[i];


    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章