pytho排序

冒泡排序

在这里插入图片描述
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。

上代码 ipython3交互模式下

In [1]: def bubble(list_):
   ...:     #  外层循环表达比较多少轮
   ...:     for i in range(len(list_) - 1):
   ...:         # 内层循环把控比较次数
   ...:         for j in range(len(list_) - 1 - i):
   ...:             if list_[j] > list_[j + 1]:
   ...:                 list_[j], list_[j + 1] = \
   ...:                     list_[j + 1], list_[j]
   ...: 

In [2]: l = [3, 7, 6, 5, 8, 3, 4, 2]

In [3]: bubble(l)

In [4]: print(l)
[2, 3, 3, 4, 5, 6, 7, 8]

选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。在这里插入图片描述

In [1]: l = [3, 7, 6, 5, 8, 3, 4, 2]

In [2]: def select(list_):
   ...:     # 外层循环控制比较多少轮
   ...:     for i in range(len(list_) - 1):
   ...:         	min = i  # 假定list_[i] 为最小值
   ...:         	for j in range(i + 1, len(list_)):
   ...:            	 if list_[min] > list_[j]:
   ...:                	 min = j
   ...:         #  如果i不是最小值则交换
   ...:         	if min != i:
   ...:             	list_[i], list_[min] = \
   ...:                	 list_[min], list_[i]
   ...:             

In [3]: select(l)

In [4]: l
Out[4]: [2, 3, 3, 4, 5, 6, 7, 8]

插入排序

插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

在这里插入图片描述

pycharm 环境下

l = [3, 7, 6, 5, 8, 3, 4, 2]
#  插入
def insert(list_):
    #  控制每次x选取的待插入数值
    for i in range(1, len(list_)):
      		  x = list_[i]  # 选取待处理的数
      		  j = i - 1
       		 while j >= 0 and list_[j] > x:
          			  list_[j + 1] = list_[j]
          			  j -= 1
   			 list_[j + 1] = x


insert(l)
print(l)

// 输出 :[2, 3, 3, 4, 5, 6, 7, 8]

快速排序

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。
步骤为:
挑选基准值:从数列中挑出一个元素,称为"基准"(pivot);
分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成;
递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序。
递归到最底部的判断条件是数列的大小是零或一,此时该数列显然已经有序。
选取基准值有数种具体方法,此选取方法对排序的时间性能有决定性影响。

在这里插入图片描述
图2

在这里插入图片描述

#  快排 low 第一个数序列号 high 最后一个数序列号
def quick(list_, low, high):
   		 if low < high:
        			key = sub_sort(list_, low, high)
        			quick(list_, low, key - 1)
        			quick(list_, key + 1, high)

# 完成一轮排序过程
def sub_sort(list_, low, high):
   		  #  基准数
  		  x = list_[low]
    	 while low < high:
       			 #  后面的数小于x放到前面的空位
       			 while list_[high] >= x and high > low:
           					 high -= 1
        		 list_[low] = list_[high]  # 将数往前甩
       			 while list_[low] < x and low < high:
           					 low += 1
       			  list_[high] = list_[low]
 		 list_[low] = x  # 将基准数插入
    	 return low
l = [3, 7, 6, 5, 8, 3, 4, 2]
quick(l, 0, 7)
print(l)
// 输出结果:[2, 3, 3, 4, 5, 6, 7, 8]

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
92讲视频课+16大项目实战+课件源码  为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。      从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。   本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。  二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。  四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。  五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值