算法小计-列表排列

算法的简单的概念
算法的概念:
O()大O表示法
O(): 程序大概运行的次数

1,时间复杂度:
时间复杂度是用来估计算法运行时间的一个式子(单位)。
常见的时间复杂度(按效率排序)
O(1)<O(logn)<O(n)<O(nlogn)<O(n**2)<O(n**2logn)<O(n**3)
前四种较重要。

2,空间复杂度:
时间复杂度:用来评估算法内存占用大小的一个式子

列表排序:
排序low b三人组:
冒泡排序
每两个相邻的数比较,如果对比一个数比一个大,交换位置。
def Bubble_Sort(li):
for i in range(len(li)):
for j in range(len(li)- i - 1):
if li[j] > li[j+1]:
li[j], li [j+1] = li[j+1], li[j]

li = [7,2,4,5,2,1,8,9]
Bubble_Sort(li)
print(li)

选择排序:
拿出一个数假设为最小的数,再随机选一个数,大的就放在后面,小的就交换位置。
def select_sort(li):
for i in range(len(li)-1):
minLoc = i
for j in range(i+1, len(li)-1)
if li[j] < li[minLoc]:
li[j], li[minLoc] = li[minLoc] ,li[j]
插入排序:
列表被分为有序区和无序区两个部分,最初有序区室友只有一个元素
每次从无序区选择一个元素, 插入到有序区的位置,直到无序区变空
def insert_sort(li):
for i in range(1, len(li)):
tmp = li[i]
j = i-1
while i >= 0 and tmp <li[j]:
li[j+1] = li[j]
j = j-1
li[j+1] = tmp

快速排序:*******
取一个元素p(第一个元素),使元素p归为;
列表被p分成两个部分,左边都比p小,右边都比p大;
递归完成排序
def partition():
tmp = li[left]

while left < right:
while left,right and li[right] > tmp:
right = right - 1
li[left] = li[right]
while left <right and li[left] < tmp:
left = left + 1
li[right] = li[left]
li[left] = tmp
return left

def quick_sort(li):
if left < right:
mid = partition(li, left, right)
quick_sort(li , left, mid -1)
quick_sort(li, mid+1, right)
排序NB二人组:
堆排序
归并排序

没什么人用的排序:
基本排序
希尔排序
桶排序

原文地址:https://www.cnblogs.com/sudaguo/p/10909152.html

时间: 2024-07-28 21:19:49

算法小计-列表排列的相关文章

Java8中HashMap扩容算法小计

Java8的HashMap扩容过程主要就是集中在resize()方法中 1 final Node<K,V>[] resize() { 2 // ...省略不重要的 3 } 其中,当HashMap扩容完毕之后,需要对原有的数据进行转移.因为容量变大了,部分元素的位置因此要变更,因而出现了下面的这个转移过程. 转移过程大致是:依次从旧数组里取值,然后从该值对应的链表上依次取出节点,对节点取模分别放入lo链表和hi链表,当链表中节点遍历完后,分别把lo链表和hi链表放入新数组的不同位置. 在看到如下

小算法-计算下一个排列

2 8 5 3 1 1.从后往前,找到第一个逆序的数 pivot 2.从后往前,找到第一个比pivot大的数 change 3.交换 pivot 和 change的值 4.把pivot这个位置后面的数 reverse,就是 8 5 2 1变成 1 2 5 8 最终为3 1 2 5 8 #include <iostream> #include <vector> #include <algorithm> using namespace std; /* * num.begin

traits技法小计

在学习算法导论的时候,对于各数据结构,自然是实现一个才算掌握,工具当然是template编程,但是自己的demo经常存在很多问题,比如没有给出迭代器啊,操作符重载不够啊等等设计上的问题,而某些问题实际上是从设计之初就该考虑的大框架,而非小细节.对于C++而言,STL无疑是最佳的参考资料,侯捷先生的STL源码剖析一书给我们良好的示范,而直接从第四章开始看会云里雾里,无法得其精髓,因此在学习算法之余决定尾随侯捷先生脚步,学习STL traits技法,从而可以从STL中学到更多的数据结构实现. 收获自

设计模式小计——23种设计模式3

责任链模式Chain of Responsibility 使多个对象都有机会处理请求,从而避免请求的发送者和接受者间的耦合关系,并沿着这条链传递请求,直到有对象处理它为止 责任链模式关键是建立链接关系,在链中决定谁来处理请求 //抽象处理者 public abstract class Handle{ private Handle nextHandle;//链的下一个节点 public final Response handleMessage(Request request){ Response

设计模式小计——23种设计模式2

模板方法模式Template Method Pattern 定义一个操作的算法的框架,是的子类可以不改变算法结构即可重定义该算法一些特定步骤 public abstract class AbstractClass{//抽象模板类 protected abstract void method1();//算法步骤1 protected abstract void method2();//算法步骤2 public void templateMethod(){//模板方法,定义算法结构 this.met

c++11小计

[capture] (parameters) mutable -> return-type { statement } " (parameters)" 和 "-> return-type"在不需要的情况下可省略. mutable:mutable修饰符.默认情况下,lambda函数总是一个const函数,mutable可以取消常量性.在使用该修饰符时,参数列表不可省略(即使为空). 在使用lambda函数的时候,如果需要捕捉的值成为lambda函数的常量,

acm算法总结zon列表

简单列了一点 1.1 基本数据结构 1. 数组 2. 链表,双向链表 3. 队列,单调队列,双端队列 4. 栈,单调栈 1.2 中级数据结构 1. 堆 2. 并查集与带权并查集 3. hash 表 自然溢出 双hash 1.3 高级数据结构 1. 树状数组 2. 线段树,线段树合并 3. 平衡树 Treap 随机平衡二叉树 Splay 伸展树 * Scapegoat Tree 替罪羊树 4. 块状数组,块状链表 5.* 树套树 线段树套线段树 线段树套平衡树 * 平衡树套线段树 6.可并堆 左偏

汽车仪表是如何计算总计里程和小计里程的?

现在汽车仪表大部分的总计里程和小计里程都是显示在屏幕上的,这包括段码屏.点阵屏.TFT彩屏等,虽然显示形式不一样,但是从业务需求和软件应用层的实现策略来讲,原理应该都是通用的.本文不涉及具体车型,仅对一般的业务逻辑作介绍,一是为了自己总结记录,二是期望吸引同行或爱好者交流. 1.总计里程 ODO(Total Odometer )即总计里程,顾名思义,主要作用是记录汽车总的行驶里程,一般来讲,在用户使用过程中是无法对其修改或清零的,因为它是对二手汽车价值评估的一项重要数值,当然随意篡改这一数据也是

这是递归和回溯的算法 是abcd&#39;的排列可能

#include<stdio.h>#include<iomanip>#include<iostream>using namespace std;bool b[10]={0};int a[10]={0};int print(){ for (int i=1;i<=4;i++) printf("%c ",a[i]); printf("\n");} int dosomething(int z){ int mm; for ( mm=1