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;
}

posted on 2019-11-22 20:47  Big_Chuan  阅读(374)  评论(0编辑  收藏  举报

导航