Java的三种排序算法

import java.util.Arrays;

public class InsertSortDemo {
 public static void main(String[] args) {
            int[] ary={5,8,63,8,9,1,3,2,45,12};
            int[] ary1=selectSort(ary);
            int[] ary2=insertSort(ary);
            int[] ary3=bubbleSort(ary);
      
           System.out.println(Arrays.toString(ary1));
           System.out.println(Arrays.toString(ary2)); 
           System.out.println(Arrays.toString(ary3));
 }
//  一:  选择排序
//     原理:
//   a 将数组中的每个元素,与第一个元素比较如果这个元素小于第一个元素, 就将这个 两个元素交换.
//   b 每轮使用a的规则, 可以选择出一个最小元素 放到第一个位置.
//   c 经过n-1轮比较完成排序
//    简单说: 每轮选择最小的放到前面.

 public static int[] selectSort(int[]ary){
  int count=0;
   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;
           }
           count++;//计算运算了多少次!
           }
          }
   System.out.println(count);
           return ary;
        
 }
// 二:  插入排序
// 第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素
// 在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置


 public static int[] insertSort(int[] ary){
  int count=0;
     for(int i=1; i<ary.length; i++){
         int temp = ary[i];
         int j;
         for(j=i-1; j>=0; j--){
           if(temp<ary[j]){
             ary[j+1] = ary[j];//移动 ary[j]->ary[j+1];留出下标j的位置让temp插入
            count++;
           }else{
            count++;
             break;
           }
     
         }
         ary[j+1]=temp;//插入 temp -> ary[j+1]是因为for循环中j--,所以跳出循环时j的值是j-1
         //就应该把temp的值赋给ary[j+1]
       }
     System.out.println(count);   //计算运算次数
       return ary;

 }


// 三: 冒泡排序
//   原理: a 逐一比较数组中相邻的两个元素, 如果后面
//          的数字小于前面的数字, 就交换先后元素.
//        b 经过一个轮次的比较, 一定有一个最大的排
//          在最后的位置.
//        c 每次比较剩下的元素, 经过n-1次比较, 可以
//          实现排序
//   简单说: 比较交换相邻元素,每次最大的漂移到最后


 public static int[] bubbleSort(int[] ary){
  int count=0;
  for(int i=0;i<ary.length-1;i++){
   boolean tap=false;
   for(int j=0;j<ary.length-i-1;j++){
    if(ary[j]>ary[j+1]){//相邻两数进行比较,大的就移动到后面去!
     int temp=ary[j];
     ary[j]=ary[j+1];
     ary[j+1]=temp;
     tap=true;
    }
    count++;//计算运算了多少次!
   // System.out.println(Arrays.toString(ary));
   }
   if(!tap){
    break;//如果j 与  j+1没有交换,跳出循环!
   }
  }
  System.out.println(count);
  return ary;
  
 }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值