python-冒泡排序与插入排序

def bubble_sort(L):
    """
        设计思路:从前往后遍历列表,每次选取列表中两个数进行比较,如果不符合排序的规则,则进行交换
                这样一次遍历后,最大(最小)的元素就会像气泡一样到达最后位置,从而达到交换的目的
        算法优点:稳定,不需要大量额外的空间开销
        缺点:慢
        时间复杂度:O(n^2)
    """
    length = len(L)
    if length < 2:
        return L
    for i in xrange(length):
        for j in xrange(length - i - 1):
            if L[j] > L[j+1]:
                L[j], L[j+1] = L[j+1], L[j]
    return L

print bubble_sort([1, 5, 2, 6, 3, 6, 2, 3, 7])

def insert_sort(L):
    """
        算法思想:顺序地从待排序的列表中选出一个元素,然后插入到一个已经排序的列表中,直到整个列表中的元素
                都进行了插入,排序就到此结束
    :param L: 待排序的列表
    :return: 已经排序的列表
    """
    length = len(L)
    if length < 2:
        return L
    else:
        for i in xrange(1,length):  # 遍历列表
            value = L[i]             #每次把当前元素当作待插入的对象
            j = i -1   # j 始终为i的前一个额元素
            while j >= 0 and L[j] < value:  //条件循环
                L[j+1] = L[j]
                j -= 1
            L[j + 1] = value
    return L

print insert_sort([1, 5, 2, 6, 3, 6, 2, 3, 7])

 

时间: 2024-11-03 21:04:48

python-冒泡排序与插入排序的相关文章

python排序之一插入排序

python排序之一插入排序 首先什么是插入排序,个人理解就是拿队列中的一个元素与其之前的元素一一做比较交根据大小换位置的过程好了我们先来看看代码 首先就是一个无序的列表先打印它好让排序后有对比效果,然后我后面注释工作流程,下面我来一一说明下其运行流程,开始先声明一个插入排序的函数名insert_sort,要传入的参数为lis,count来获取列表lis长度len(lis),然后我们要开始写循环对比for i in range(从1到列表长度count)然后把列表下标为一位置的数也就是28(li

Python使用二分插入排序竟然比直接插入排序快99倍!

?? Python使用二分插入排序竟然比直接插入排序快99倍! 之前发布同一个算法,C++竟然比C快8倍! , 有同学提出是因为C++中使用了二分插入排序,于是用python比较了下两种排序差距有多大. 测试结果如下: Python insertion sort took time: 1:39:42.448904Python insertion sort with binary search took time: 0:01:13.263267 代码如下: import datetime impo

九种经典排序算法详解(冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序,计数排序,桶排序,基数排序)

综述 最近复习了各种排序算法,记录了一下学习总结和心得,希望对大家能有所帮助.本文介绍了冒泡排序.插入排序.选择排序.快速排序.归并排序.堆排序.计数排序.桶排序.基数排序9种经典的排序算法.针对每种排序算法分析了算法的主要思路,每个算法都附上了伪代码和C++实现. 算法分类 原地排序(in-place):没有使用辅助数据结构来存储中间结果的排序**算法. 非原地排序(not-in-place / out-of-place):使用了辅助数据结构来存储中间结果的排序算法 稳定排序:数列值(key)

排序(上):冒泡排序、插入排序和选择排序

如何分析一个排序算法? 分析一个排序算法的三要素:排序算法的执行效率.排序算法的内存消耗以及排序算法的稳定性. 排序算法的执行效率 对于排序算法执行效率的分析,一般是从以下三个方面来衡量: 最好情况.最坏情况.平均情况时间复杂度 时间复杂度的系数.常数.低阶 比较次数和交换(或移动)次数 第1.2点在之前的复杂度分析中我们已经讲过了,第3点会在这一节以及接下来的章节中详细讲解. 这一节和下一节讲的都是基于比较的排序算法.基于比较的排序算法的执行过程,会涉及两种操作,一种是元素比较大小,另一种是元

JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序

1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习. 之所以把冒泡排序.选择排序.插入排序放在一起比较,是因为它们的平均时间复杂度都为 O(n2). 请大家带着问题:为什么插入排序比冒泡排序更受欢迎 ?来阅读下文. 2. 如何分析一个排序算法 复杂度分析是整个算法学习的精髓. 时间复杂度: 一个算法执行所耗费的时间. 空间复杂度:

冒泡排序,插入排序

冒泡排序 每两个相邻的元素进行比较,前者大于后者则交换元素位置,直到所有的相邻元素均无法交换位置步骤 步骤 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 3.针对所有的元素重复以上的步骤,除了最后一个. 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. python代码: lst = [43,56,53,33,1,23] def mpsort(ln):

java中数组的排序,直接排序,冒泡排序,插入排序

1.直接排序: public static void selectSort(int[] arr) { for (int x = 0; x < arr.length - 1; x++) { for (int y = x + 1; y < arr.length; y++) { if (arr[x] > arr[y]) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } } } 说明:双重for循环,数组的第一个数a[0]和后面所有

排序系列之——冒泡排序、插入排序、选择排序

排序之——冒泡排序: 基本思想:假设待排序表长为N,从后往前(或者从前往后)两两比较相邻元素的值,若为逆序(arr[i-1]>arr[i]),则交换他们,直到序列比较完.这时一趟冒泡. 代码如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <time.h> 5 #define N 20 6 7 void print_Arr(int *arr,

冒泡排序,插入排序,归并排序,快速排序的学习笔记

这几个很基础的排序非常有用,我重新整理了下代码 1 #include<iostream> 2 #include<algorithm> 3 4 using namespace std; 5 6 void Bouble_Sort(int * Arry,int Lenth) //冒泡排序 7 { 8 int i,k; 9 10 int flag = 0; 11 12 for(i = Lenth - 1;i >= 0; i--) 13 { 14 for(k=0;k<i;k++)

Java中的几种排序算法:冒泡排序,插入排序,二分法排序,简单排序,快速排序

冒泡排序: int[] hehe={4,7,2,5,6,9,0}; for(int i=0;i<hehe.length;i++){ for(int j=i+1;j<hehe.length;j++){ if(hehe[i]>hehe[j]){ int temp=hehe[i]; hehe[i]=hehe[j]; hehe[j]=temp; } } } 插入排序 int[] a={13,7,8,9,10,1,2,32}; int i,j,t,h; for (i=1;i<a.length