Java数组03-常见排序算法

常见排序算法

1.冒泡排序

不停地两两对比排列顺序

//从大到小排序
class Bubble{
   public int[] sort(int[] array){
       int temp = 0; //用来当容器交换数字
       for(int i = 0;i < array.length - 1; i++){
           int flag = 0; //避免无用比较
           for(int j = 0; j < array.length - i - 1; j++){
               if(array[j+1] > array[j]){
                   temp = array[j];
                   array[j] = array[j+1];
                   array[j+1] = temp;
                   flag = 1;
              }
          }
           if(flag == 0) {
               break;
          }
      }
       return array;
  }
   public static void main(String[] args){
       Bubble bubble = new Bubble();
       int[] array = {2,3,5,2,7,3,5,7,2,0};
       int[] sort = bubble.sort(array);
       for(int num : sort){
           System.out.print(num + "\t");
      }
  }
}

 

2.选择排序

不停找出数组中的最大(最小)元素排列

class SelectSort{
public int[] sort(int arr[]){
       int temp = 0;
       for(int i = 0; i < arr.lrngth - 1; i++){
           int mixIndex = i;
           for(int j = i + 1; j < arr.lrngth; j++){
               if(arr[minIndex] > arr[j]){
                   minIndex = j;
              }
          }
           if(i != minIndex){
               temp = arr[i];
               arr[i] = arr[minIndex];
               arr[minIndex] = temp;
          }
      }
       return arr;
  }
   public static void main(String[] args){
       SelectSort selectSort = new SelectSort();
       int[] array = {2,3,5,2,7,3,5,7,2,0};
       int[] sort = selectSort.sort(array);
       for(int num : sort){
           System.out.print(num + "\t");
      }
  }
}

 

3.稀疏数组

当数组中大部分元素为同一值时,用稀疏数组来保存数组。

处理方式:记录数组有几行几列,有几个不同的值。

把具有不同值的元素和行列及值记录在一个小规模的数组中。

000220015
011000170
000-6000
00000390
91000000
00280000
  
[0]678总共6行7列,有8个不同数
[1]0322在几行几列(坐标),值
[2]0615在几行几列(坐标),值
[3]1111在几行几列(坐标),值
[4]1517在几行几列(坐标),值
[5]23-6在几行几列(坐标),值
[6]3539在几行几列(坐标),值
[7]4091在几行几列(坐标),值
[8]5228在几行几列(坐标),值
//11*11棋盘,0:无子,1:黑棋,2:白棋
public class ArrayDemo{
   public static void main(String[] args){
       //创建二维数组
       int[][] array1 = new int[11][11];
       array1[1][2] = 1;
       array1[2][3] = 2;
       //转换为稀松数组
       //1.获取有效值的个数
       int sum = 0;
       for(int i = 0; i < 11; i++){
           for(int j = 0; i < 11; j++){
               if(array1[i][j] != 0){
                   sum++;
              }
          }
      }
       //2.创建一个稀松数组的数组
       int[][] array2 = new int[sum + 1][3];
       array2[0][0] = 11;
       array2[0][1] = 11;
       array2[0][2] = sum;
       //遍历二维数组,将非0的值存放在稀疏数组中
       int count = 0;
       for(int i = 0; i < array1[i].length; j++){
           if(array1[i][j] != 0){
               count++;
               array2[count][0] = i;
               array2[count][1] = j;
               array2[count][2] = array1[i][j];
          }
      }
  }
   //还原
   //1.读取稀疏数组
   int[][] array3 = new int[ array2[0][0] ][ array2[0][1] ];
   //2.还原值
   for(int i = 1; i < array2.length; i++){
       array3[ array2[i][0] ][ array2[i][j] ] = array2[i][2];
  }
}

 

4.感想

不知不觉,简单的已经学过的内容学完了,接下来就要领悟真正的面向对象的含义了,希望我依然能坚持下来,在比较困难的知识中仍然刻苦努力,游刃有余。同时六级考试也临近,在学习Java、完成课业的同时,也要努力争取过了四六级!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值