python排序算法之冒泡,选择,插入

1.参考

一本关于排序算法的 GitBook 在线书籍 《十大经典排序算法》,使用 JavaScript & Python & Go 实现

2.冒泡排序:两两比较,互换位置

arr = [9,8,2,23,3]

# 冒泡排序 两两比较,互换位置
# 3 5 9 1 8
# A B C D E
# 3 5 9 1 8
# 3 5 9 1 8
# 3 5 1 9 8
# 3 5 1 8 9
# 第一轮比较将最大数排到最后,5个数总共需要4轮即1,2,3,4
# 比较是arr[j] > arr[j+1],第一轮j取前4个数即range(4)即可,第二轮j取前3个数range(3)即可
# 5个数总共比较 4 3 2 1 = 10次

def bubble_sort(arr):
    print ‘bubble_sort:‘,arr
    count = 0
    for i in range(1, len(arr)):
        for j in range(len(arr)-i):
            count += 1
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    print ‘bubble_sorted:‘, count, arr
bubble_sort([9,8,2,23,3])
# bubble_sort([int(i) for i in raw_input(‘:‘).split()])   

2.选择排序:找出极值,换到队头

# 3 5 9 1 8
# A B C D E

def select_sort(arr):
    count = 0
    for i in range(len(arr)-1): #总共需要4次min or max
        arr_min = min(arr[i:])  #取出的数放在列首更容易处理
        arr.remove(arr_min)
        arr.insert(i, arr_min)  #注意插入位置更新
    print arr
# select_sort(arr[:])   

# 五个数字需要4轮
# 0位和1,2,3,4比较,小的马上换到0位
# 1位和2,3,4比较,小的马上换到1位

def select_sort1(arr):
    count = 0
    for i in range(len(arr)-1):
        for j in range(i+1, len(arr)):
            count += 1
            if arr[i] > arr[j]:  #注意arr[i]一直被更新
                arr[i], arr[j] = arr[j], arr[i]
    print count
    print arr
# select_sort1(arr[:])   

def select_sort2(arr):
    print ‘select_sort2:‘,arr
    count = 0
    for i in range(len(arr)-1):
        min_index = i
        for j in range(i+1, len(arr)):
            count += 1
            if arr[min_index] > arr[j]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]  #一轮之后再更新 arr[i]
    print ‘select_sort2ed:‘, count, arr
select_sort2([9,8,2,23,3])  

3.插入排序:打牌,已排+未排,逐个插入(折半优化)

# 3 5 9 1 8
# A B C D E
#A已排序,BCDE未排序
#AB已排序,CDE未排序
def insert_sort(arr):
    print ‘insert_sort:‘,arr
    count = 0
    for i in range(1, len(arr)):  #操作数是B
        for j in range(0,i):  #操作数是A
            count += 1
            print ‘B‘, arr[i], ‘A‘, arr[j], arr
            if arr[i] < arr[j]:
                arr.insert(j, arr[i])
                arr.pop(i+1)  #先插入,导致原来要移除的位置推后1位
                print arr
                break
    print ‘insert_sorted:‘, count, arr

insert_sort([9,8,2,23,3]) 
时间: 2024-10-22 11:38:32

python排序算法之冒泡,选择,插入的相关文章

排序算法之冒泡、插入、快排和选择排序

排序算法大全 package cn.baidu; import java.util.Arrays; public class SortTest { public static void main(String[] args) { int[] arr = { 2, 5, 3, 1, 4 }; System.out.println("排序前:" + Arrays.toString(arr)); // InsertSort.sort(arr); // BubbleSort.sort(arr)

基本排序算法(冒泡、插入、选择、快排)

1.首先定义一个需要排序的数组: $arr=array(12,432,123,454,232,123,349,3,5,745,90); 2.冒泡排序:相邻之间的数据做对比,每次对比后得出一个下次不需要再对比的数据. function maopao($arr){ $len=count($arr); for($i=0;$i<$len;$i++){ for($j=0;$j<$len-$i;$j++){ if($arr[$j]<$arr[$j+1]){ $temp=$arr[$j; $arr[$

python排序算法实现(冒泡、选择、插入)

python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)): for j in range((i+1),len(s)): s[i],s[j]=min(s[i],s[j]),max(s[i],s[j]) #print count print s 2.选择排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(l

python 数据结构与算法之排序(冒泡,选择,插入)

目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 计算机重要的几门课: 1.数据结构和算法 2.网络 3.操作系统 4.计算组成原理 数据结构与算法: 算法: 衡量算法的标准: 时间复杂度:就是程序代码执行的大概次数 小结: 时间复杂度是用来估计算法运行时间的一个式子(单位) 一般来说,时间复杂度高的算法比复杂度低的算法慢 常见的

排序算法-(冒泡、选择、插入算法)

运行效率较慢的三大排序算法:冒泡.选择与插入算法,时间复杂度都为O(n2),运行效率较慢. #python 代码实现如下所示: li=[2,1,4,5,7,8,9,5,3]#冒泡算法(升序算法)O(n2)import randomfrom cal_time import *@cal_timedef bubble_sort(li): for i in range(len(li)-1): #第i趟 exchange=False for j in range(len(li)-i-1): #无序区域为n

常见排序算法(冒泡、选择、插入、快速、归并C++实现)

常见排序算法(冒泡.选择.插入.快速.归并C++实现) #include <iostream> using namespace std; // 冒泡排序 void bubbleSort (int data[], size_t size) { for (size_t i = 0; i < size - 1; ++i) { bool ordered = true; for (size_t j = 0; j < size - 1 - i; ++j) if (data[j+1] <

排序算法比较和选择

排序算法有不少,当然,一般的语言中都提供某个排序函数,比如Python中,对list进行排序,可以使用sorted(或者list.sort()),关于这方面的使用,在我的github代码库algorithm中有几个举例,有兴趣的看官可以去那里看看(顺便告知,我在Github中的账号是qiwsir,欢迎follow me).但是,在某些情况下,语言中提供的排序方法或许不适合,必须选择某种排序算法. 这里整理一些排序算法的比较,供看官参考. 计算复杂度比较 名称 平均速度 最坏情况 冒泡排序法 O(

排序算法七:选择排序之堆排序

排序算法七:选择排序之堆排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评>中给出的首个算法就是高效的排序算法.本文将对排序算法做一个全面的梳理,从最简单的"冒泡"到高效的堆排序等. 上博文讲述了选择排序中的简单排序算法,本文介绍的堆排序是树性选择排序,采用堆这个数据结构来辅助排序. 排序相关的的基本概念 排序:将一组杂乱无章的数据按一定的规律顺次排列起来. 数据

排序算法之直接选择排序

直接选择排序是最简单直观的排序算法,属于选择排序. 直接算法的排序思路: 第一趟,程序将记录定位在第一个数据上,拿第一个数据依次和后面的数据进行比较,如果第一个数据大,交换,依次类推.经过第一趟比较,这组数据中最小的数据被选出来,排在第一位. 第二趟,程序将记录定位在第二个数据上,拿第二个数据依次和后面的数据比较,同样地,第二个数据大就交换.经过第二次比较,这轮最小的书被选出来,放在了第二位. 这样经过n-1次比较,这组数据就会变得有序.下面是直接选择的排序算法实现. /** * Created