java中的排序

原创 2012年03月30日 20:27:23

插入排序

public class InsertSort {
 /*
       i-1        i
        8       3       5       1      4     7
        temp =3
第一次:     3(8)  8(3)
                 temp = 5
第二次:     3     5(8)  8(5)
                         temp=1 
第三次            1(3)     3(5)     5(8)   8(1)
                                      temp=4
第四次            1        3       4(5)    5(8)     8(4)
                                              temp=7
第五次            1        3        4      5        7(8)    8(7)
  */

 public static int[] minToMaxInsert(int[] ary) {
        for(int i =1;i<ary.length;i++){//循环次数
         int temp = ary[i];
         int j = 0;
         //找位置
         for(j = i-1;j>=0;j--){
          if(temp<ary[j]){
           ary[j+1]=ary[j];
          }else{
           break;
          }
         }
         ary[j+1]=temp;
         System.out.println(Arrays.toString(ary));
        }
  return ary;
 }
 
 public static int[] minToMaxInsert1(int[] ary) {
        for(int i =1;i<ary.length;i++){//循环次数
         int temp = ary[i];
         int j = 0;
         //找位置
         for(j = i-1;j>=0&&temp<ary[j];j--){
           ary[j+1]=ary[j];
         }
         ary[j+1]=temp;
         //System.out.println(Arrays.toString(ary));
        }
  return ary;
 }

 

选择排序:

public class SelectionSortDemo {

 /*分析:
    8    3      5    1    4    7
temp = 8
1、         3    8(换位)
temp = 3
2、         3    5
3、         1    3(换位)
4、         1    4
5、         1    7
       1
  */
 //获取数组中的最小值(temp)
 public static int selectionMinValue(int[] ary){
  int temp = ary[0];//8获取数组中第一个元素
  for(int i =1;i<ary.length ;i++){
  //System.out.println(ary[i]);//除一个元素以外的值
     if(temp>ary[i]){
      temp=ary[i];
     }
  }
  return temp;
 }
 /*分析:
    8    3    5    1    4    7
    ^    ^
temp = 8
1、         3    8  5    1    4    7

2      ^         ^
       3    8  5    1    4    7
      
3、        1(3)    8  5    3(1)    4    7
       ^              ^
4、       1(3)    8  5    3(1)    4    7
      ^                       ^ 
5、        1(3)    8  5    3(1)    4    7
       ^                           ^
  */
 //获取第一次排序
 public static int[] firstSelectionSort(int[] ary){
        for(int i =1;i<ary.length ;i++){
         //比对
         if(ary[0]>ary[i]){
          int temp =ary[i];
          ary[i]=ary[0];
          ary[0]=temp;
          System.out.println(ary[0]+"交换"+ary[i]);
         }
        }
  return ary;
 }
 
 /*
      8    3    5          1           4           7
  temp = 8
  i          i+1
第一次: 1(3)   8    5          3(1)        4           7
第二次: 1(3)  3(1)  8(5)       5(8)(3(1))  4           7
第三次: 1(3)  3(1) 4(5(8(8(5)))) 8(5)(5(8))  5(8(8(5))) 7
第四次:1(3)  3(1) 4(5(8(8(5))))  5(8(8(5)))  8(5)(5(8)) 7
第五次:1(3)  3(1) 4(5(8(8(5))))  5(8(8(5))) 7    8(5)(5(8))
  */
 
 public static int[] selectionSort(int[] ary){
  for(int i = 0;i<ary.length-1;i++){//外层循环次数
   for(int j = i+1;j<ary.length;j++){//取出每次比较最小值
    if(ary[i]>ary[j]){//换位子
     int temp = ary[i];
     ary[i]=ary[j];
     ary[j]=temp;
    }
   }
   //System.out.println(Arrays.toString(ary));
  }
  return ary;
 }

冒泡排序:

public class BubbleDemo {
 /*分析
   8    3    5    1      4    7
i   i    i+1
1、   3    8
2、                  5    8
3、                             1    8
4、                                         4      8
5、                                                         7    8  
  */
 
 public static int[] maxBubble(int[] ary){
  for(int i = 0;i<ary.length-1;i++){
   //第一个值 ary[i]  后边值ary[i+1]
   if(ary[i]>ary[i+1]){//相邻元素比较
    int temp = ary[i];
    ary[i]=ary[i+1];
    ary[i+1]=temp;
    System.out.println(ary[i]+"交换"+ary[i+1]);
   }
  }
  return ary;
 }
 
 /*
    8    3    5    1      4    7
 i=0  
  temp = 8                               i
第一次     3    5    1    4      7    8     -0
  temp = 3
第二次     3    1    4    5      7          -1
temp = 3
第三次    1     3    4    5                 -2
temp = 1
第四次     1     3    4                      -3
temp = 1
第五次     1     3                           -4
  */
 public static int[] bubbleSort(int[] ary){
  for(int i = 0;i<ary.length-1;i++){//循环次数
   for(int j=0;j<ary.length-1-i;j++){//每次相邻比对
    if(ary[j]>ary[j+1]){//比
     int temp = ary[j];
     ary[j]=ary[j+1];
     ary[j+1]=temp;
    } 
   }
  }
  return ary;
 }
 
 public static void main(String[] args) {
  int[] ary={8,3,5,1,4,7};
  ary = BubbleDemo.maxBubble(ary);
  System.out.println(Arrays.toString(ary));
 }
}

 

 

相关文章推荐

自然归并排序java版

  • 2017年11月06日 13:19
  • 3KB
  • 下载

java排序问题

  • 2016年06月05日 09:40
  • 2KB
  • 下载

Java JVM(十二):指令重排序

介绍指令重排序的相关知识。

java各自排序算法的实现

  • 2015年06月16日 16:27
  • 3KB
  • 下载

堆排序之Java实现

  • 2017年07月27日 17:03
  • 4KB
  • 下载

Java集合中的排序问题

有时我们需要对集合框架(包括Set、 List、 Map)中的元素进行排序,比如在Android开发中经常要用到ListView来显示一个列表,而这个列表中的数据很多时候都是使用一个ArrayList...

java冒泡排序详解

  • 2017年06月09日 09:49
  • 13KB
  • 下载

冒泡归并和快速排序java源码

  • 2016年05月11日 20:30
  • 2KB
  • 下载

Java - 贪心算法 - 三值排序

排序是一种很频繁的计算任务。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种1,2和3。我们用交换的方法把他排成升序的。 写一个程序计算出,计算出的一个包括...

java版6种排序算法

  • 2015年11月11日 10:32
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中的排序
举报原因:
原因补充:

(最多只允许输入30个字)