【查找、排序~python】


个人昵称:lxw-pro
个人主页:欢迎关注 我的主页
个人感悟: “失败乃成功之母”,这是不变的道理,在失败中总结,在失败中成长,才能成为IT界的一代宗师。

python 线性查找

线性查找指按一定的顺序检查数组中每一个元素,直到找到所要寻找的特定值为止

def search(arr, n, x):

    for i in range(0, n):
        if arr[i] == x:
            return i
    return -1


# 在数组arr中查找字符D
arr = ['A', 'B', 'C', 'D', 'E']
x = 'C'
n = len(arr)
result = search(arr, n, x)
if result == -1:
    print("元素不在数组中")
else:
    print("元素在数组中的索引为", result)


# -*-1-*-
def LinearSearch(list):
    num = int(input('Number:\t'))
    counter = 0
    null = 0

    for i in list:
        if i == num:
            print('Find number {} in place {}'.format(num,counter))
        else:
            null += 1
        counter += 1
    if null == counter:
        print('Don\'t.csv find it.')


list = {1, 2, 5, 8, 9, 12, 16, 18, 20, 0}
LinearSearch(list)

整体结果如下:

在这里插入图片描述


Python 二分查找

二分搜索是一种在有序数组中查找某一特定元素的搜索算法
这种搜索算法每一次比较都使搜索范围缩小一半

# 递归法:
# 返回x在arr中的索引,如果不存在返回-1:
def binarySearch (arr, l, r, x):
    if r >= l:
        mid = int(l + (r - l)/2)

        # 元素整好的中间位置
        if arr[mid] == x:
            return mid

        # 元素小于中间位置的元素,只需要在比较左边的元素
        elif arr[mid] > x:
            return binarySearch(arr,l,mid-l,x)

        # 元素大于中间位置的元素,只需要在比较右边的元素
        else:
            return binarySearch(arr,mid+l,r,x)

    else:
        # 不存在
        return -1


# 测试数组
arr = [2, 3, 4, 8, 20]
x = 8

# 函数调用
result = binarySearch(arr,0,len(arr)-1,x)

if result != -1:
    print("元素在数组中的索引为 %d" % result)
else:
    print("元素不在数组中")


运行结果如下:

在这里插入图片描述

————————————————————————————————————————————

python 插入排序

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

def insertionSort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i-1
        while j >= 0 and key < arr[j]:
            arr[j+1] = arr[j]
            j -= 1
        arr[j+1] = key


arr = [2, 1, 6, 8, 5, 20, 12]
insertionSort(arr)
print("排序后的数组:")
for i in range(len(arr)):
    print("%d" % arr[i], end=' ')	# 输出 1 2 5 6 8 12 20 

arr = [20, 5, 8, 6, 9, 12, 52, 62, 4, 9]

def insertionSort(arr):
    for i in range(1,len(arr)):
        j = i
        while j > 0:
            if arr[j] < arr[j-1]:
                arr[j-1],arr[j] = arr[j],arr[j-1]
            j -= 1
    return arr


print(insertionSort(arr))	# 输出 [4, 5, 6, 8, 9, 9, 12, 20, 52, 62]

python 快速排序

'''
快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,
然后递归地排序两个子序列。

步骤为:

挑选基准值:从数列中挑出一个元素,称为"基准"(pivot);
分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成;
递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序。
递归到最底部的判断条件是数列的大小是零或一,此时该数列显然已经有序。

选取基准值有数种具体方法,此选取方法对排序的时间性能有决定性影响

'''

可尝试写出快速排序算法的代码,毕竟代码这东西,用心打的多啦,效果真的非常好!!

————————————————————————————————————————————

(我最晒无限循环)代码如下:

import time, os


def main():
    content = '我最晒我最晒我最晒你也最晒'
    while True:
        os.system('cls')
        print(content)
        time.sleep(0.2)
        content = content[1:] + content[0]


if __name__ == '__main__':
    main()

***记得用鼠标点控制台上的红色正方形按钮——停止运行,不然电脑迟早崩溃***

运行结果如下:

我最帅
————————————————————————————————————————————

Pandas 每日一练:

print()只为转行,方便查看运行结果

# -*- coding = utf-8 -*-
# @Time : 2022/7/20 14:07
# @Author : lxw_pro
# @File : pandas-3 练习.py
# @Software : PyCharm

import pandas as pd
import numpy as np

lxw3 = {"project": ['Python', 'Java', 'C', 'MySQL', 'Linux', 'Math', 'English', 'Python'],
       "popularity": [91, 88, 142, 136, np.nan, 146, 143, 148]}

df = pd.DataFrame(lxw3)

11、将DataFrame保存为EXCEL

df.to_excel("test3.xlsx")
print("over!")       # 显示完成情况(可不写)

print()		# 转行,方便查看结果

12、查看数据行列数

hl = df.shape
print(f"数据行列数为:{hl}")

print()

13、提取popularity列值大于142小于150的行

tq3 = df[(df['popularity'] > 142) & (df['popularity'] < 150)]
print("提取popularity列值大于142小于150的行为:\n", tq3)

print()

14、交换两列位置(两个方法)

# 法一:
cols = df.columns[[1, 0]]   # 注意是两个中括号
df = df[cols]
print(df)

print()

# 法二:
tmp = df['popularity']
df.drop(labels=['popularity'], axis=1, inplace=True)
df.insert(0, 'popularity', tmp)
print(df)

print()

15、提取popularity列最大值所在行

print(df[df['popularity'] == df['popularity'].max()])

相关运行结果如下:

11-13:
在这里插入图片描述
14-15:
在这里插入图片描述


每日一言:

为什么时光叫做时光呢?
大慨是因为每一段时间里,都会有一份光吧!


持续更新中…

点赞,你的认可是我创作的动力
收藏,你的青睐是我努力的方向
评论,你的意见是我进步的财富
关注,你的喜欢是我长久的坚持
在这里插入图片描述

欢迎关注微信公众号程序人生6】,一起探讨学习哦!!!

  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值