基础排序java实现

需要掌握的基础排序

一、插入排序  1)直接插入排序2)希尔排序

二、交换排序  1)冒泡排序2)快速排序

三、选择排序  1)简单选择排序2)堆排序

四、归并排序

一、插入排序

  简单的理解就是遍历整个数组,在过程中对每个数都跟前面进行比较只要比它小就往前挪。

  1) 直接插入排序实现

      public static void directInsert(int [] data)
      {
          int temp=0;
          int len=data.length;
          for(int i=1;i<len;i++)
          {
              temp=data[i];
              int j=i-1;
              while(j>-1 && temp<data[j])
              {
                  data[j+1]=data[j];
                  j--;
              }
              data[j+1]=temp;
          }
      }

  2)希尔排序

  理解:http://blog.csdn.net/morewindows/article/details/6668714

  按照n/2,n/4,n/8,,,,1的间隔对数组进行直接插入排序。当数组基本有序时,插入排序比较的次数最少,间隔为1的时候基本有序,最后一次执行插入排序效果最好。

      public static void shellInsert(int [] data)
      {
          int temp=0;
          int len=data.length;
          for(int gap=len/2;gap>0;gap/=2)//最外围的缩小增量
          {
              for(int i=0;i<len;i+=gap)//间隔排序比如13579    246810  这样的等间隔分组   直接插入排序
              {
                  temp=data[i];
                  int j=i-gap;
                  while(j>-1 && temp<data[j])
                  {
                      data[j+gap]=data[j];
                      j-=gap;
                  }
                  data[j+gap]=temp;
              }
          }
      }

二、交换排序

  1)冒泡排序

  相邻的两个数比较大小,直到交换完成。

  第一趟把最大的数换到了最右边,第二趟第二大的换到了倒数第二个,每次对前n-i个数进行排序。

      public static void bubble(int [] data)
      {
          int len=data.length;
          int cnt=0;//交换次数。假如为0,排序完成跳出
          int temp=0;
          for(int i=1;i<len;i++)//进行n-1趟排序
          {
              for(int j=0;j<len-i;j++)
              {
                  if(data[j]>data[j+1])
                  {
                      temp=data[j];
                      data[j]=data[j+1];
                      data[j+1]=temp;
                      cnt++;
                  }
              }
              if(cnt==0)
                  break;
              cnt=0;
          }
      }

  2)快速排序

  

时间: 2024-09-30 06:59:08

基础排序java实现的相关文章

【Java基础】Java面试题目整理与解说(二)

1.Collection 和 Collections 的差别. Collection 是集合类的上级接口,继承于他的接口主要有 Set 和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作. 2.HashMap 和 Hashtable 的差别. HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完毕了 Map 接口,HashMap是非线程安全,效率上可能高于 Hashtable.在多个线程

【Java基础】Java面试题目整理与讲解(二)

1.Collection 和 Collections 的区别. Collection 是集合类的上级接口,继承于他的接口主要有 Set 和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作. 2.HashMap 和 Hashtable 的区别. HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完成了 Map 接口,HashMap是非线程安全,效率上可能高于 Hashtable.在多个线程

八大基础排序总结

前言 大概花了一周的时间把八大基础排序过了一遍,这篇博文主要是用来回顾一下八大基础排序的要点和一些总结- 回顾: 冒泡排序就这么简单 选择排序就这么简单 插入排序就这么简单 快速排序就这么简单 归并排序就这么简单 堆排序就这么简单 希尔排序就这么简单 基数排序就这么简单 总的来说:快速排序是用得比较广泛的一个排序,也是经常出现的一个排序,应该重点掌握- 二.八大排序总结 2.1冒泡排序 思路: 俩俩交换,大的放在后面,第一次排序后最大值已在数组末尾. 因为俩俩交换,需要n-1趟排序,比如10个数

希尔排序及希尔排序java代码

原文链接:http://www.orlion.ga/193/ 由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序按照此规律直到全部参与了排序.然后将间隔约定为4-1=3,然后继续进行如上的排序方法.具体过程如下: 9 1 2 3 0 4 5 7 6 8 Setp 1 经过间隔为4排序后变成 : 0 1 2 3 6 4 5 7 9 8 Setp 2 经过间隔为3排序后变成 : 0 1 2 3 6 4 5 7 9

基础排序算法

七个基础排序算法(均为内部排序): 直接插入排序 希尔排序 冒泡排序 简单选择排序 快速排序 堆排序 二路归并排序 排序算法稳定性:经过排序后,具有相同关键码的元素之间的相对次序保持不变,则称该排序方法是稳定的;否则不稳定. 直接插入排序: void InsertSort(int a[],int n){ // index start at 1, a[0] is temp one int i,j; for(i=2;i<=n;i++){ if(a[i]<a[i-1]){ a[0]=a[i]; a[

HDFS基础和java api操作

1. 概括 适合一次写入多次查询情况,不支持并发写情况 通过hadoop shell 上传的文件存放在DataNode的block中,通过linux shell只能看见block,看不见文件(HDFS将客户端的大文件存放在很多节点的数据块中,Block本质上是一个逻辑概念,它是hdfs读写数据的基本单位) HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间 2. fs 可以使用hdfs shell操作hdfs,常用 fs命令如下: eg: hadoop fs -cat fi

五本书籍助你从零基础学习java编程到精通之路

前天的文章给大家介绍了Java初学者应该学习哪些基础,亦是美网络小编从Java的三个大方向:J2SE.J2EE.J2ME对大家做了前景分析,这两天也收到了大家的很多反馈,很多小伙伴看了后对自己的Java编程方向有了比较明确的目标,也有小伙伴们说,要是能提供一些Java初学者应看的书籍就更好了,其实推荐Java书籍已经被规划在小编写的Java编程系列文章之中,常言道:书中自有黄金屋,书中自有颜如玉,下面亦是美网络小编给大家推荐的Java书籍中虽然没有黄金屋和颜如玉,但却能让Java编程的初学者快速

算法练习5---快速排序Java版

基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. 例如 3 1 5 2 7 9 3 0 首先以3为基准数,基准数的意思就是以这个数为参考,其他数和它做比较,现在例如有两个人,分别从左边和右边开始找,右边的人要找到比基准数3小的数,左边的人找比基准数3大的数,找到以后进行交换,右边的人先开始找,例如上面的数组,右边的人从0开始找,0比3小

【java基础】Java反射机制

一.预先需要掌握的知识(java虚拟机)  1)java虚拟机的方法区:  java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存储被装载的类 的类型信息,当java虚拟机装载某个类型的时候,需要类装载器定位相应的class文件,然后将其读入到java虚拟机中,紧接着虚拟机提取class 中的类型信息,将这些信息存储到方法区中.这些信息主要包括: 这个类型的全限定名 这个类型的直接超类的全限定名 这个类型是类类型还是接口类型