算法0介绍 排序
来源:互联网 发布:esp8266 51单片机 编辑:程序博客网 时间:2024/06/14 08:56
http://blog.csdn.net/xiazdong/article/details/8462393
算法
是指解题方案准确而完整的描述,是一系列解决问题的清洗的指令, 算法代表着用系统的方法描述解决问题的策略机制. 也就是说, 能够对一定规范的输入, 在有限时间内获得所求的输出.
程序=算法+数据结构
算法的可行性与空前复杂度, 时间复杂度
大数据下,牺牲精度换取速度.
数据结构
- 是一种存储和组织数据的方式, 意在便于访问和修改
- 指针和链表
- 队列,堆栈,树,散列表
排序
插入排序
将每个元素循环地与前面的元素相比较, 若小于前面的便交换.
伪代码
时间复杂度为
InSert <- function(a){ for ( i in 2:length(a)){ key <- a[i] j <- i - 1 while (j >=1 && a[j] > key){ a[j+1] <- a[j] j = j-1 } a[j+1] <- key } a}InSert(c(3,2,1,4))
递归版(有错误未解决,返回不出排序后的数组)
Recursive_InertionSort<- function(A,p,q){ if (p < q){ Recursive_InertionSort(A,p,q-1) Insert(A, p, q-1) } A}Insert<- function(A,p,q){ k = A[q+1] j = q while (j >= p && A[j] < k){ A[j+1] = A[j] j = j - 1 } A[j+1] = k}Recursive_InertionSort(c(2,3,4,1),1,4)
P与NP
P问题的时间复杂度是多显示时间的
Np问题: 是能被一个多项式时间算法验证的语言类
类P问题有一些可以快速解决的问题组成, 而类NP则由一些可以快速验证其解得问题组成.
线性规划问题的单纯型法和多项式时间复杂度的椭球法, 但线性规划问题不是严格的NP
分治
归并排序例子
冒泡排序
Bubble_sort <- function(A){ len <- length(A) for (i in 1:(len-1)){ for (j in len:(i+1)){ if (A[j-1] > A[j]){ swap <- A[j] A[j] <- A[j-1] A[j-1] <- swap } } } A}> Bubble_sort(c(2,3,4,1))[1] 1 2 3 4
改进的冒泡
每次进入之前判断内层排序是否swap过,即有未排序好的值。若内层都拍好序了就直接得到结果。
improved_Bubble_sort <- function(A){ len <- length(A) for (i in 1:(len-1)){ if (flag==0) return flag <- 0 for (j in len:(i+1)){ if (A[j-1] > A[j]){ swap <- A[j] A[j] <- A[j-1] A[j-1] <- swap flag <- 1 } } } A}
递归的冒泡
冒泡排序和插入排序哪个更快“呢?一般的人回答:“差不多吧,因为渐近时间都是O(n^2)”。但是事实上不是这样的,插入排序的速度直接是逆序对的个数,而冒泡排序中执行“交换“的次数是逆序对的个数,因此冒泡排序执行的时间至少是逆序对的个数,因此插入排序的执行时间至少比冒泡排序快。
选择排序
selection_sort <- function(A){ len <- length(A) for (i in 1 : (len-1)){ min = i for (j in (i+1):len){ if(A[min] > A[j]) min <- j } tmp <- A[i] A[i] <- A[min] A[min] <- tmp } A}selection_sort(c(3,2,4,5))
归并排序
快速排序
http://blog.csdn.net/morewindows/article/details/6684558
该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。
堆排序
计数排序
0 0
- 算法0介绍 排序
- 各种排序算法介绍
- 排序算法介绍
- 排序算法介绍
- 常见排序算法介绍
- 自然排序算法介绍
- 排序算法介绍
- 排序算法介绍
- 常用排序算法介绍
- 【排序算法介绍】
- 快速排序算法介绍
- 排序算法介绍
- STL排序算法介绍
- Java 排序算法 介绍
- 十种排序算法 介绍
- 排序算法介绍(一)
- 排序算法 种类 总结 介绍
- c语言排序算法介绍
- wxhl ios bj 49期 张浩 学习心得体会连载 第四章
- metasploit - browser_autopwn2
- MATLAB神经网络学习
- yii中事件的了解
- ListView 和RecyclerView的比较
- 算法0介绍 排序
- Android系统开关
- 华为机试 单词查找、排序、去重
- PHP二维数组排序(sort_array)
- 全局变量与局部变量在内存中的区别详细解析
- MCU低功耗设计(二)实践
- 九度oj 1449
- shell学习
- .net配置authentication实现全局验证