C++/Python冒泡排序與選擇排序算法詳解

冒泡排序

冒泡排序算法又稱交換排序算法,是從觀察水中氣泡變化構思而成,原理是從第一個元素開始比較相鄰元素的大小,若大小順序有誤,則對調後再進行下一個元素的比較,就彷彿氣泡逐漸從水底逐漸冒升到水面同樣。如此掃描一次以後就能夠確保最後一個元素位於正確的位置。接着再逐步進行第二次掃描,直到完成全部元素的排序關係爲止。

Python代碼:

import random
#構造數據
data = list()
for i in range(10):
    data.append(random.randint(0, 100))


#打印數據
def show(array, lens):
    for k in range(lens):
        print("%3d" % array[k], end='')
    print()


print("原始數據:  ", end='')
show(data, 10)
#排序算法
for m in range(10 - 1):
    for n in range(10 - m - 1):
        if data[n] > data[n + 1]:
            data[n], data[n + 1] = data[n + 1], data[n]
    print("第%d次冒泡:  " % (m + 1), end='')
    show(data, 10)

print("排序結果:  ", end='')
show(data, 10)

C++代碼:

int * Bubble_Sort(int array[], int len)
{
    if (array == NULL)
    {
        return NULL;
    }
    int temp = 0;
    for(int i = 0; i < len - 1; i++)
    {   
        for(int j = 0; j < len - i - 1; j++)
        {
            if(array[j] < array[j + 1])
            {
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
    return array;
}

選擇排序

選擇排序算法算是枚舉法的應用,就是反覆從未排序的數列中取出最小的元素,放到對應的位置。例如一開始在全部數據中挑選出最小項放在第一個位置(假設從小到大排列),再從第二項纔是挑選一個最小項放在第2個位置,以此重複,直到完成排序

Python代碼

import random
data = list()
for i in range(20):
    data.append(random.randint(0, 100))


def show_array(array, lens):
    for m in range(lens):
        print("%4d" % (array[m]), end='')
    print()


print("原始數據:  ", end='')
show_array(data, 20)
for k in range(20 - 1):
    min_num = k
    for n in range(k+1, 20):
        if data[n] < data[min_num]:
            min_num = n
    if min_num != k:
        data[k], data[min_num] = data[min_num], data[k]
    print("第%2d次交換:" % (k+1), end='')
    show_array(data, 20)
print("順序數據:  ", end='')
show_array(data, 20)

C++代碼:

int * Select_sort(int array[], int lens)
{
    if (array == NULL)
    {
        return NULL;
    }
    
    for(int i = 0; i < lens - 1; i++)
    {
        int min = i;
        for(int j = i + 1; j < lens; j++)
        {
            if (array[j] < array[min])
            {
                min = j;
            }
        }
        if (min != i)
        {
            int temp = array[i];
            array[i] = array[min];
            array[min] = temp;
        }
    }
    return array;
}
相關文章
相關標籤/搜索