6.

约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人被杀掉;他的下一个人又从1开始报数,数到k的那个人又被杀掉;依此规律重复下去,直到圆桌周围的人只剩最后一个。


def get_live(lens=, k=):
"""k is step"""
flag =
if k == :
return lens
else:
people = [ x for x in range(, (lens + )) ]
print(people)
while True:
if flag == :
mod = k % lens #deal with step > len(people)
flag = k
#print(people)
if mod == :
mod = lens
people.pop(mod-)
lens = lens -
if lens == :
break
flag = (flag + k - ) % lens mod = flag
print(people)

5. 生成140个随机数,在1到100范围内,然后统计重复的数字:

 def gen_random_numbers(min=0, max=100, numbers=40):
"""随机生成N个随机数"""
i = 0
li_random = []
li = [ random.randint(min,max) for x in range(0, numbers)]
return li def get_de(l):
"""显示l里面重复过的元素"""
set_ = set()
for i in l:
temp = l.pop(l.index(i))
if temp in l:
set_.add(temp)
return set_ def get_repeat(list_count):
"""获取list里面重复的元素和次数"""
set_nums = set(list_count)
print('!',set_nums)
dict_re = {}
for i in set_nums:
count = list_count.count(i)
print('count {} > {}'.format(i,count))
if count >1:
dict_re[i] = count
return dict_re if __name__ == '__main__':

4. 快速排序:

一般选取low为第一次的基准值,先从右边往左边找,找到小于基准值的值,j停下,否则一直j -= 1,  然后从左往右找,找到大于基准值的值,i停下,此时交换i,j的位置的list中的值,然后继续寻找, 继续交换值,左边的都是比基准值小的,右边都是比基准值大的,知道当i==j值,交换基准值于list[i]的值,一轮查找结束/////////////第二轮的时候,基准值的左边和右边,分为两队,直接递归就行了,

def q_sort(listB, low, high):
i = low
j = high
if i> j:
return listB
pov = listB[low]
while i<j:
while i<j and listB[i] <= listB[j]:
j -= 1
while i<j and listB[i] <= listB[j]:
i += 1
if i<j:
listB[i], listB[j] = listB[j], listB[i]
elif i == j:
listB[low], listB[i] = listB[i], listB[low] q_sort(listB,low, i-1)
q_sort(listB,j+1,high)
return listB

3. 选择排序:

选择排序原理即:在选择排序中,不再只比较两个相邻的数据。因此需要记录下某一个数据的下标,进行选择排序就是把所有的数据扫描一遍,从中挑出(按从小到大排序)最小的一个数据,这个最小的数据和最左端下标为0的数据交换位置。之后再次扫描数据,从下标为1开始,还是挑出最小的然后和1号位置进行交换,这个过程一直持续到所有的数据都排定。而程序中需要有一个标识变量来标识每次挑出最小数据的下标。

选择排序减少了交换数值的次数,只记录下标,最后交换最小的下标。

选择排序改进了冒泡排序,将必要的交换次数从 O(N2)减少到 O(N)次。不幸的是比较次数仍然保持为 O(N2)。然而,选择排序仍然为大记录量的排序提出了一个非常重要的改进,因为这些大量的记录需要在内存中移动,这就使交换的时间和比较的时间相比起来,交换的时间更为重要

listA = [1123,11,3,1,222,33,76,1,12345]

def select_sort(li):
for i in range(0, len(li)):
flag = i
for j in range(i+1, len(li)):
if li[i] > li[j]:
flag = j
li[i], li[flag] = li[flag], li[i] print(li) if __name__ == '__main__':
select_sort(listA)

2. 冒泡排序:

linum = [88,77,44,55,9,111,222,777,55,3,22]

def bubu_order(unsorted):
for i in range(0, len(unsorted)):
for j in range(0, len(unsorted)-1):
if unsorted[j] > unsorted[j]:
unsorted[j],unsorted[j+1] = unsorted[j+1],unsorted[j]
return unsorted if __name__ == '__main__':
print(bubu_order(linum))

for i in list2:

i =33

//这样是不能修改list本身的~~~

//获取对应值的index:

listA.index('33')

//另外一种获取list序号的方法:

for i,j in enumerate(listA):

print(i,j)

//str转list

str1.split()

//list转str

' '.join(listA)

1. 插入排序:

  插入排序默认第一个为已经排好顺序的列表,后面的每一个都与之比较并排序,排好之后,所有的自然都已经排好, 第二种优化的算法,如果已经插入, 说明找对了位置,那么下面就break,如果不需要排序, 那么就说明已经是最大的了, 因为前面的已经排好了,排好之后,也不需要再排了,可以break了。

import time

start = lambda : time.time()
list1 = [66,33,1,3,111,3,10,29,7,123,56,23] * 50 def busorted(unsorted):
l = len(unsorted)
for i in range(0,l):
key = unsorted[i]
for x in range(i,0,-1):
if unsorted[x] < unsorted[x-1]:
unsorted[x], unsorted[x-1] = unsorted[x-1], unsorted[x]
return unsorted def optimizesorted(unsorted):
l = len(unsorted)
for i in range(0,l):
key = unsorted[i]
for x in range(i,0,-1):
if unsorted[x] < unsorted[x-1]:
unsorted[x], unsorted[x-1] = unsorted[x-1], unsorted[x]
else :
break
return unsorted if __name__ == '__main__':
print(list1)
t1 = start()
print(busorted(list1))
t2 = start()
print('-----------Time is {}'.format(t2-t1))

  

python算法练习的更多相关文章

  1. 安装Python算法库

    安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...

  2. python算法(一)

    python算法(一) 一.求数x的因子 x=100 divisors=()#初始化空的元组 for i in range(1,x): if x%i==0: divisors=divisors+(i, ...

  3. Python算法与数据结构--求所有子数组的和的最大值

    Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个 ...

  4. Python算法:推导、递归和规约

    Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心 ...

  5. Python算法(含源代码下载)

    关键字:Python Algorithms Python算法  Mastering Basic Algorithms in the Python Language 使用Python语言掌握基本算法 P ...

  6. python算法题 python123网站单元四题目

    目录 一:二分法求平方根 二:Collatz猜想 三:算24(只考虑满足,不考虑把所有情况找出来)   下面向大家介绍几个python算法题. 一:二分法求平方根 1.题目要求为 2.输入输出格式为 ...

  7. python算法介绍:希尔排序

    python作为一种新的语言,在很多功能自然要比Java要好一些,也容易让人接受,而且不管您是成年人还是少儿都可以学习这个语言,今天就为大家来分享一个python算法教程之希尔排序,现在我们就来看看吧 ...

  8. Java && Python 算法面试常用类以及方法总结

    数据结构 逻辑结构上: 包括集合,线性结构,非线性结构. 存储结构: 顺序存储,链式存储,索引存储,散列存储. Java 常见数据结构 大专栏  Java && Python 算法面试 ...

  9. GitHub标星2.6万!Python算法新手入门大全

    今天推荐一个Python学习的干货. 几个印度小哥,在GitHub上建了一个各种Python算法的新手入门大全,现在标星已经超过2.6万.这个项目主要包括两部分内容:一是各种算法的基本原理讲解,二是各 ...

  10. python算法常用技巧与内置库

    python算法常用技巧与内置库 近些年随着python的越来越火,python也渐渐成为了很多程序员的喜爱.许多程序员已经开始使用python作为第一语言来刷题. 最近我在用python刷题的时候想 ...

随机推荐

  1. Tarjan算法【强连通分量】

    转自:byvoid:有向图强连通分量的Tarjan算法 Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树.搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断 ...

  2. Codeforces 387E George and Cards

    George and Cards 我们找到每个要被删的数字左边和右边第一个比它小的没被删的数字的位置.然后从小到大枚举要被删的数, 求答案. #include<bits/stdc++.h> ...

  3. Fiddler教程--简介

    1.开发环境host配置 自己修改系统的host来回挺麻烦的 2.前后的接口调试 3.线上bugfix 4.性能分析和优化 5.等等... 工作原理 一个代理服务器 地址改为 127.0.0.1:88 ...

  4. sql 把一个用逗号分隔的多个数据字符串变成一个表的一列

    USE [tms]GO/****** Object: UserDefinedFunction [dbo].[StrToTable] Script Date: 2017/4/26 9:06:20 *** ...

  5. 071 SparkStreaming与SparkSQL集成

    1.说明 虽然DStream可以转换成RDD,但是如果比较复杂,可以考虑使用SparkSQL. 2.集成方式 Streaming和Core整合: transform或者foreachRDD方法 Cor ...

  6. 20165235 祁瑛 Java第四周考试总结

    20165235 祁瑛 Java第四周考试总结 课后习题p29 p45 代码编写 import java.util.*; class Example2_5{ public static void ma ...

  7. day64 url用法以及django的路由系统

    此篇博客是以备后查的,用到的时候记得过来查找即可! 路由系统:就是我们的django项目创建的时候自带的那个urls.py 它本身里面是映射的对应关系,一个大的列表里面,一个个元祖,元祖里面是url或 ...

  8. day 34 编程之补充内容

    生产消费者模型(必须要理解并且牢记,默写内容): from multiprocessing import Process,Queue import time,random,os def procduc ...

  9. day30 网络编程 之进程,线程,协程

    进程点进去 线程点进去 协程点进去 什么是进程 进程(有时称为重量级进程)是一个执行中的程序.每个进程都拥有自己的地址空间.内存.数据栈以及其他用于跟踪执行的辅助数据.同一个程序执行两次,属于是两个不 ...

  10. 初窥Java之三

    一.基本数据类型之浮点型 每个数据它自身都有一个默认的类型,如果直接打印小数,默认类型就为double类型: float和double表示小数的精度不是特别的高,如果对于精确度要求非常的高,我们 都使 ...