排序算法(一):冒泡排序和選擇排序

1.冒泡排序

冒泡排序,顧名思義,數(shù)值大的數(shù)據(jù)像從前向后冒(順序排列)。每次比較相鄰的兩個元素,如果后者比前者數(shù)值更小則交換二者的順序,依次遍歷整個數(shù)組,完成排序。

冒泡排序.gif

python實(shí)現(xiàn):

def bubble_sort(arr):
    for i in range(0, len(arr)):
        for j in range(0, len(arr)-i-1):
             if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

c++實(shí)現(xiàn):

void bubble_sort(int arr[], int len){
    for(int i=0;i<len-1;i++){
        for(int j=0;j<len-1-i;j++){
            if (arr[j]>arr[j+1])
                std::swap(arr[j], arr[j+1]);
        }
    }
}

一個小坑
在編寫c++代碼時開始只想給bubble_sort()函數(shù)傳入一個參數(shù):數(shù)組arr[],arr的長度len試圖在函數(shù)中通過 sizeof(arr) / sizeof(arr[0]) 獲得,但是測試時始終無法正確得到數(shù)組arr的長度。獲得數(shù)組長度的正確方法:

#include<iostream>
using namespace std;
template<class T>
int length(T& arr)
{
    //cout << sizeof(arr[0]) << endl;
    //cout << sizeof(arr) << endl;
    return sizeof(arr) / sizeof(arr[0]);
}
int main()
{
    int arr[] = { 1,5,9,10,9,2 };
    // 方法一
    cout << "數(shù)組的長度為:" << length(arr) << endl;  // 輸出結(jié)果:數(shù)組的長度為:6
    // 方法二
    //cout << end(arr) << endl;
    //cout << begin(arr) << endl;
    cout << "數(shù)組的長度為:" << end(arr)-begin(arr) << endl;  // 輸出結(jié)果:數(shù)組的長度為:6
    system("pause");
    return 0;
}

2.選擇排序

選擇排序,首先在數(shù)組全體元素中找到最小的元素,記錄其索引,將該元素與未排序部分的首元素交換位置。剩余元素中重復(fù)該操作,即可完成排序。

選擇排序.gif

python實(shí)現(xiàn):

def selection_sort(arr):
    for i in range(len(arr) - 1):
        # 記錄最小數(shù)的索引
        minIndex = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[minIndex]:
                minIndex = j
        # i 不是最小數(shù)時,將 i 和最小數(shù)進(jìn)行交換
        if i != minIndex:
            arr[i], arr[minIndex] = arr[minIndex], arr[i]
    return arr

c++實(shí)現(xiàn)

void selection_sort(int arr[], int len){
    for(int i=0;i<len-1;i++){
        int minindex=i;
        for(int j=i+1;j<len;j++){
            if (arr[minindex] > arr[j]){
                minindex = j;
            }
        }
        std::swap(arr[i], arr[minindex]);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容