数据分析python基础算法

本文介绍了数据分析中常用的三种排序算法:冒泡排序、选择排序和快速排序。冒泡排序通过相邻元素比较交换实现,可优化减少不必要的交换检查。选择排序每次选取序列最小值放到首位。快速排序采用分治策略,通过基准元素划分序列,递归处理子序列,实现高效排序。
摘要由CSDN通过智能技术生成

1.冒泡排序:
冒泡排序是相对比较简单的排序算法,原理是依次比较数组中的元素,大的下沉,小的上浮,伪代码为

for i in range(len(nums)):
    for j in range(len(nums)-i-1):
        if nums[j] > nums[j+1]:
            nums[j],nums[j+1] = nums[j+1],nums[j]

原理比较简单,但要注意的是数组的索引,上述方法的时间复杂度是O(n^2),对此方法进行优化,方法主要是加入一个是否进行交换的判断,如没有进行交换可认为排序已完成

for i in range(len(nums)):
    is_train = 0
    for j in range(len(nums)-i-1):
        if nums[j] > nums[j+1]:
            nums[j],nums[j+1] = nums[j+1],nums[j]
            is_train = 1
    if is_train ==0:
       break

同时也可以尝试一下冒泡排序的进阶版:鸡尾酒排序,鸡尾酒排序的实质和冒泡排序的原理是一致的,只不过鸡尾酒排序是双向进行的;

2.选择排序:
选取序列中的最小值,将该值放到首位,再从剩下的序列中找到最下值,放到第二位,依次进行,时间复杂度为O(n^2)
伪代码为:

for i in range(len(nums)-1):
    min_index = i
    for j in range(i+1,len(nums)):
        if nums[j] < nums[min_index]:
            min_index = j
    nums[i],nums[min_index] = nums[min_index],nums[i]
    

代码也很简单,同样需要注意的是索引部分。
3.快排:
快排可以使用单边循环法和双边循环法来实现,先使用双边循环法进行操作,算法的思想是选择字符串第一位作为基准元素,从字符串两边依次进行比较,把大于基准元素的放右边,小于基准元素的放左边;
伪代码为:

def quick_sort(nums,start,end):
    if start >= end:
        return 
	pivot = nums[start]
	left = start
	right = end
	while left < right:
	    while left<right and nums[right] >=pivot:
	        right -=1
	    while left < right and nums[left] < pivot:
	        left +=1
	    if left < pivot:
	        nums[left],nums[right] = nums[right],nums[left]
	quick_sort(nums,start,right-1)
	quick_sort(nums,left+1,end)
	return nums

此处需要注意的是如何呈现递归的方法,以及在递归中开始节点,结束节点的选择,代码小白调试很多次才把结果搞对。
单边循环法:
和双边循环法的逻辑基本是一致的,代码看起来会简单一些,
代码为:

def quick_sort(nums,start,end):
    if start >= end:
        return
    pivot = nums[start]
    mark = start
    for i in range(start,end+1):
        if nums[i] < pivot:
            mark += 1
            nums[mark],nums[i] = nums[i],nums[mark]
    nums[start],nums[mark] = nums[mark],nums[start]
    quick_sort(nums,start,mark-1)
    quick_sort(nums,mark+1,end)
    return nums
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值