您的位置:首页 > 编程语言 > Java开发

Java实现插入、冒泡、选择排序

2014-07-23 20:16 393 查看
一 插入排序(InsertSort)

  插入排序算法的思想如下:

  (1)将整个数组划分成两部分:有序区和无序区。初始情况下,有序区包括数组的第一元素,无序区包括剩余的其他元素。

(2)遍历无序区,每次向有序区增加一个元素,在增加元素后要保证有序区的有序性。

实现代码如下:

package com.test10;
 
import java.util.Arrays;
 
public
class
InsertSort {
 
   public
static int
[] insertSort(int[] array){
      for(int i=1;i<array.length;i++){
         //从第二个元素开始遍历数组
         int temp = array[i];//保存新增加的元素
         int j = 0;//定义有序区数组的下标
         //对有序区进行排序
         for(j=i-1;(j>-1)&&(temp<array[j]);j--){
            array[j+1]=array[j];
         }
         array[j+1]=temp;
      }
      return array;
   }
   public
static void
main(String[] args) {
      // TODO Auto-generated method stub
       int[] array={9,8,7,6,5,4,3,2,1};
       System.out.println("排序前:"+Arrays.toString(array));
      System.out.println("排序后:"+Arrays.toString(insertSort(array)));
   }
}

结果如下:

排序前:[9,8, 7, 6, 5, 4, 3, 2, 1]
排序后:[1,2, 3, 4, 5, 6, 7, 8, 9]
 

总结:插入排序归根结底就是把第一个元素作为一个基准,分成两部分,左边是排好序的,然后,拿右边无序的第一个元素与左边排好序的元素进行比较排好序后,一个一个加入到左边,做种最终排成升序的数组。

二 冒泡排序(BubbleSort)

  对数组元素进行排序,通常使用冒泡排序法,冒泡排序法的排序原理如下:

  (1)对数组中相邻的两个元素从前向后进行扫描。

  (2)如果相邻两个元素中的第一个数比第二个数大,就交换这两个数,这样经过一次扫描之后,最大的元素移动到数据序列的最后。

  (3)重复(1)、(2)两个步骤,用同样的方法再对其前面的所有其他元素进行比较,当经过某次扫描后,如果没有需要交换的数据了,则算法结束。

实现代码如下:

package com.test10;
 
import java.util.Arrays;
 
public
class
BubbleSort {
   public
static void
main(String[] args) {
      // TODO Auto-generated method stub
      int[]array={50,13,55,97,27,38,49,65};
      System.out.println("原始数组中各元素的顺序如下:"+Arrays.toString(array));
//    for(inti =0;i<array.length;i++){
//       System.out.print(array[i]+"  ");//输出数组中各元素的值
//    }
      System.out.println();
      System.out.println("排序后数组中各元素的顺序:"+Arrays.toString(bubbleSort(array)));
     
   }
   public
static int
[] bubbleSort(int[] array){
      //使用冒泡排序法对数组array进行排序
      for(int i = 0;i<array.length-1;i++){
         for(int j =0;j<array.length-1;j++){
            //如果数组中前边元素值比后边相邻元素值大
            if(array[j]>array[j+1]){
                //声明变量x用于保存数组中前边元素的值
                int x = array[i];
                //将前边元素的值替换为后边相邻的元素
                array[j]=array[j+1];
                //用原来前边元素的值替换后边相邻元素的值
                array[j+1]=x;
            }
         }
      }
      return array;
   }
}

结果如下:

原始数组中各元素的顺序如下:[50, 13, 55, 97, 27, 38, 49, 65]
 
排序后数组中各元素的顺序:[13,13, 27, 27, 38, 49, 50, 65]

总结:冒泡排序就是数组中相邻的两个数进行比较,循环一次以后,把最大的那个数,比较交换到最后。多次进行比较交换以后,最终得到升序的数组。

三 选择排序算法(SelectSort)

  选择排序算法的思想如下:

  (1)将序列分成有序区和无序区两部分,初始时有序区为空,无序区包括全部元素。

(2)每次从无序区中选择最小的元素将其与无序区第一个元素进行交换。

(3)重复步骤(2),直到无序区没有元素。

程序代码如下:

package com.test10;
 
import java.util.Arrays;
 
public
class
SelectSort {
   public
static void
main(String[] args) {
      // TODO Auto-generated method stub
      int[]array={9,8,7,6,5,4,3,2,1};
          System.out.println("排序前:"+Arrays.toString(array));
          System.out.println("排序后:"+Arrays.toString(selectSort(array)));
   }
 publicstaticint[]selectSort(int[]array){
     int temp=0;//定义用于交换元素的临时变量
     int index=0;//保存元素的下标
     for(inti =0;i < array.length;i++){
        index = i;
        for(intj = i +1;j <array.length;j++){
           //查找最小元素
           if(array[j]<array[index]){
              index=j;
           }
        }
        //将最小元素进行交换
        if(index!=i){
           temp=array[i];
           array[i]=array[index];
           array[index]=temp;
        }
     }
     return array;
 }
}

 

 

结果如下:

排序前:[9, 8, 7, 6, 5, 4, 3, 2,1]
排序后:[1, 2, 3, 4, 5, 6, 7, 8,9]

总结:

   选择排序还是将数字分成两块,一块为有序区,一块为无序区。只不过与插入排序不同的事,有序区为空而已。然后,先假定整个数组第一个位置为有序区第一个位置,且无序区第一个位置为整个数组的第一个位置。在排序过程中,假定有序区第一个位置不变,使得二维循环的j右边+1,使得array[index]与array[j+1]进行比较,如果array[index=i(这里为i)]<array[j+1],把j赋值给index,判断下标是否不等,进行交换。多次交换以后,得到升序数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐