![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
文章平均质量分 74
aitim
这个作者很懒,什么都没留下…
展开
-
排序算法(八):快速排序
定义: 将一个序列经过一次排序后分成两部分,其中一部分的关键字都比另一部分大,然后再分别对这两部分继续进行排序,直到得到一个有序的序列。 时间复杂度:O(nlogn) 空间复杂度:O(logn) 实现 public class Quick { public void sort(int[] arr){ qsort(arr,0,arr.length-1); }原创 2013-12-27 22:43:48 · 628 阅读 · 0 评论 -
排序算法(二):冒泡排序
定义: 将待排序的记录两两比较,如果是反序的则交换,直到没有反序记录为止。 实现: 待排序记录 int[] array = {9,1,5,8,3,7,4,6,2}; 1、由前向后排序 public class BubbleF2T { public void sort(int[] array){ for(int i=0;i<array.length;i++)原创 2013-12-26 18:40:21 · 523 阅读 · 0 评论 -
排序算法(三):选择排序
定义: 假设有n个记录的序列,由最左边开始排序,每次排序都是在n-i+1个元素中选出最小的记录,与第i个元素进行交换。 特点: 每次排序只会发生一次数据交换。 时间复杂度:最好是0,最坏是O(n^2) 实现: public class Selection { public void sort(int[] arr){ int min=0;原创 2013-12-26 22:05:06 · 521 阅读 · 0 评论 -
排序算法(一):基本概念
排序的数学定义: 假设含有n个记录的序列为{r1,r2,r3,......,rn},其相应的关键字序列为{k1,k2,k3,......,kn},需确定1,2,3,......,n的一种序列p1,p2,p3,......,pn,使其相应的关键字满足kp1 排序的稳定性: 假设ki=kj(1j),在排序前的序列中ri领先于rj(既i 排序的分类: 根据待排序的记录是否都放置原创 2013-12-26 17:34:08 · 605 阅读 · 0 评论 -
排序算法(四):插入排序
定义: 将一个记录插入到一个已经排好序的序列中,从而得到一个新的、记录数加1的有序的序列。 时间复杂度:最好是O(n),最差是O(n^2) 实现: public class Insertion { public void sort(int[] arr){ for(int i=1;i<arr.length;i++){ if(arr[i]原创 2013-12-27 11:06:10 · 487 阅读 · 0 评论 -
排序算法(五):希尔排序
定义: 将一个序列按照一定的“间距”分成几个子序列,把每个子序列进行插入排序,得到一个小数基本在前,大数基本在后的基本有序的序列,然后将“间距”逐渐缩小直到间距为1,最终得到一个有序的序列。 时间复杂度:O(n^3/2) 实现: public class Shell { public void sort(int[] arr){ int increment=a原创 2013-12-27 12:00:54 · 612 阅读 · 0 评论 -
排序算法(七):归并排序
定义: 假设一个序列有n个记录,可以被看成是n个长度为1的子序列,将这些子序列两两归并,等到一个长度为2的子序列,再两两归并,直到子序列长度为n,就得到了一个有序的序列。 时间复杂度:O(nlogn) 实现: 1、递归实现 public class merge { public void sort(int[] arr){ int[] newarr= new int原创 2013-12-27 18:39:05 · 520 阅读 · 0 评论 -
排序算法(九):总结
1、算法分类 根据算法采用的主要操作,可以将算法分为:插入排序、交换排序、归并排序、选择排序四大类,前面介绍的七种算法分别归属这四大类。 排序算法 插入排序 交换排序 选择排序 归并排序 插入排序 希尔排序 冒泡排序 快速排序 选择排序 堆排序 归并排序 从算法的简单性来看,又可分为:简单算法、改进算法: 简单算法:冒泡原创 2013-12-28 12:57:20 · 576 阅读 · 0 评论 -
排序算法(六):堆排序
堆定义: 堆是一种完全二叉树,每个结点都大于等于其子结点的称为大顶堆,每个结点都小于等于其子结点的称为小顶堆。 堆排序定义: 将待排序的序列构造成一个大顶堆,此时堆顶是最大值,将其移到序列最末端后,剩余的序列重新构造一个大顶堆,如此反复直到得到一个有序序列。 时间复杂度:O(nlogn) 实现: public class Heap { public void sort原创 2013-12-27 15:58:05 · 625 阅读 · 0 评论