zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    日常脚本练习与解释
    第五周作业
    centos 7中命令记录
    centos7 中如何查看、打开、关闭防火墙。
    第四周
    复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的 行首的空白字符
    vim中设置tab缩进为4个字符
    Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
    sql 索引笔记--索引组织结构
    sql 索引笔记2
  • 原文地址:https://www.cnblogs.com/Hijack-you/p/11914000.html
Copyright © 2011-2022 走看看