排序
Super-小龙
应届生
展开
-
简单插入排序
直接插入算法实现算法思想:将要排序的数字写入int数组内,original[1]是一个有序数组,循环查找original=2”>i,将original[i]插入到有序数组内。 最后得到有序数组.算法时间复杂度:O(n^2) 算法空间复杂度:O(1)算法优点:稳定排序,算法容易实现。 缺点:时间复杂度高,不是线性时间//直接排序算法#include<stdio.h>#include<iost原创 2017-02-25 11:46:07 · 418 阅读 · 0 评论 -
希尔排序
算法思想:希尔排序是分组插入的方法。按照增量将数组分割成n组,在每一组中进行直接插入排序。然后改变增量大小,继续进行直接插入排序。最后的增量必须为1,就是所有记录在同一组进行直接插入排序。算法优点:为什么要采用多分组呢?其实就是减少数据移动的次数,假设一个最小的元素排在最后,如果按照直接插入排序需要移动n-1次,这个代价很大。而按照希尔排序,可能只需要移动(n/增量)次。可以看出这种跳跃式移动的优势原创 2017-03-08 10:25:35 · 399 阅读 · 0 评论 -
C实现折半插入排序
算法思想:将排序的记录放入数组original[1-n]中,original[1]是有序的,再循环n-1次,将后面的n-1个记录一次插入有序数组的正确位置形成一个有序的数组,而折半插入的做法是将待插入的记录和排好的有序数列的中间记录做比较,选择插入有序数列的左子表或右子表,直到找到正确的插入位置。时间复杂度:O(n^2) 空间复杂度:O(1) (数组的第一位用来存待插入的记录)算法特点:合理利用数原创 2017-03-04 11:22:30 · 1321 阅读 · 0 评论 -
冒泡排序
算法思想:两两比较待排序的相邻记录,如果逆序,那么进行交换。采用两个循环嵌套语句,内层循环每次可以选出待排元素的最小值或最大值,外层循环每次排除掉一个内层循环选出的最值。空间复杂度:O(1) —需要一个辅助空间 时间复杂度:O(n^2)–有两层循环算法特点:稳定排序。可以采用链式结构,因为只有相邻元素的操作。缺点:N较大,记录无序时花费时间代价大。#include <iostream>using原创 2017-03-09 20:33:46 · 958 阅读 · 0 评论 -
简单选择排序(simple Selection Sort)
算法思想:每一趟从待排序的记录中选出关键字的最小记录,按照顺序放在已排序的记录序列的最后,直到全部排完。时间复杂度:O(n^2)–两层循环,并没有优化的方法。 空间复杂度:O(1)—–记录交换时候需要一个辅助空间算法特点:稳定性可以控制。可以用链式存储。记录移动次数较小。时间复杂度较高。不多BB,直接上代码:#include <iostream>#include <stdio.h>using原创 2017-03-22 12:27:01 · 420 阅读 · 0 评论 -
快速排序实现
算法思想:采用递归的思想,在将待排序的的N个记录任意选择一个枢纽,经过一趟排序,将N个记录中比选择枢纽的值小的记录放在左子表中,把比枢纽的值大的记录放在右子表中。然后枢纽的位置在左右子表的分界处。分别对左右字表重复以上过程,知道子表只有一个记录,那么排序就完成了。需要两个函数: 一个是通过N个无序的记录和它的上界和下界,得到枢纽的位置,以便确定这个无序的记录可分的左右字表的上下界。 另外一个就是原创 2017-03-22 10:42:38 · 381 阅读 · 0 评论 -
插入排序(java)
最近开始慢慢啃《算法导论》,书中的给出的抓扑克牌例子非常容易理解插入排序,虽然插入排序本身简单易懂。算是纪念阅读圣经的开始,不知道能坚持多久呀。import java.util.Arrays;public class Insertsort { /** * @param args */ public static void main(String[] args) {原创 2017-07-18 10:10:35 · 246 阅读 · 0 评论