Java基础知识强化12:Java中运用数组的四种排序方法

1、使用JavaApi文档中的Arrays类中的sort()进行快速排序

首先我们直接看代码如下:

 1 package himi.text;
 2
 3 import java.util.Arrays;
 4
 5 public class TestDemo01 {
 6
 7     public static void main(String[] args) {
 8         int[] array = {2,12,3,44,27};
 9         /**
10          * 利用使用JavaApi文档中的Arrays类中的sort()进行快速排序
11          */
12         Arrays.sort(array);//调用Array的静态方法Sort进行排序,升序排列
13         for(int show:array) {
14             System.out.print(show+" ");//升序输出
15         }
16         System.out.println();
17         System.out.println("---------------");
18
19         for(int i=0; i<array.length-1; i++)
20         System.out.print(array[array.length-1-i]+" ");//降序输出
21
22
23     }
24
25 }

代码运行结果如下:

2.冒泡法排序:

冒泡法算法思路:如果有N个数,则要进行N-1次比较,在每一次比较中要进行N-1次两两比较。所谓的两两比较就是从头到尾将相邻两个数进行比较,并将其中较大的数放在前或者放在后(放在前就是降序,放在后就是升序)

 1 package himi.text;
 2
 3 public class TestDemo02 {
 4
 5     public static void main(String[] args) {
 6         int[] arrays = { 12, 23, 8, 17, 5 };
 7         bubbleSort(arrays);
 8         for (int show : arrays)
 9             System.out.print(show + " ");
10     }
11
12     public static void bubbleSort(int[] array) {
13         int temp;
14         for (int i = 0; i < array.length - 1; i++) {
15             for (int j = 0; j < array.length - 1 - i; j++) {
16                 if (array[j] > array[j + 1]) {
17                     //方式1
18                     // temp = array[j];
19                     // array[j]=array[j+1];
20                     // array[j+1]=temp;
21
22                     //方式2
23                     array[j] = array[j] ^ array[j + 1];
24                     array[j + 1] = array[j + 1] ^ array[j];
25                     array[j] = array[j] ^ array[j + 1];
26                 }
27             }
28         }
29     }
30
31 }

输出结果:

3.选择排序:

首先以一个元素为基准,从一个方向开始扫描,比如从左到右扫描,以A[0]为基准,接下来从A[0]….A[9]中找出最小的元素,将其与A[0]交换。然后将其基准位置右移一位,重复上面的动作,比如,以A[1]为基准,找出A[1]~A[9]中最小的,将其与A[1]交换。一直进行到将基准位置移到数组最后一个元素时排序结束。

 1 package himi.text;
 2
 3 public class TestDemo03 {
 4
 5     public static void main(String[] args) {
 6         int[] arrays = {12,23,8,17,5};
 7         int[] temp = selectSort(arrays);
 8         for(int show:temp)
 9             System.out.print(show+" ");
10     }
11
12
13     public static int[] selectSort(int[] args){//选择排序算法
14         for (int i=0;i<args.length-1 ;i++ ){
15                int min=i;
16                for (int j=i+1;j<args.length ;j++ ){
17                      if (args[min]>args[j]){
18                           min=j;
19                           }
20                  }
21                      if (min!=i){
22                      int temp=args[i];
23                      args[i]=args[min];
24                      args[min]=temp;
25                  }
26            }
27             return args;
28    }
29
30 }

运行结果如下:

4.插入排序算法:

所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。

 1 package himi.text;
 2
 3 public class TestDemo04 {
 4
 5     public static void main(String[] args) {
 6         int[] arrays = {12,23,8,17,5};
 7         int[] temp = insertSort(arrays);
 8         for(int show:temp)
 9             System.out.print(show+" ");
10     }
11     public static int[] insertSort(int[] args){//插入排序算法
12         for(int i=1;i<args.length;i++){
13                 for(int j=i;j>0;j--){
14                         if (args[j]<args[j-1]){
15                                 int temp=args[j-1];
16                                 args[j-1]=args[j];
17                                args[j]=temp;
18                        }else break;
19                }
20         }
21         return args;
22 }
23
24 }

运行结果:

时间: 2024-08-14 09:18:27

Java基础知识强化12:Java中运用数组的四种排序方法的相关文章

JAVA中运用数组的四种排序方法

JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法. 快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现. 冒泡法是运用遍历数组进行比较,通过不断的比较将最小值或者最大值一个一个的遍历出来. 选择排序法是将数组的第一个数据作为最大或者最小的值,然后通过比较循环,输出有序的数组. 插入排序是选择一个数组中的数据,通过不断的插入比较最后进行排序.下面我就将他们的实现方法一一详解供大家参考. <1>利用Arrays带有的排序方法快

Java基础知识强化之IO流笔记62:三种方式实现键盘录入

1. 三种方式实现键盘录入     System.in 标准输入流.是从键盘获取数据的 键盘录入数据三种方式:  A:main方法的args接收参数.  java HelloWorld hello world java  B:Scanner(JDK5以后的)  Scanner sc = new Scanner(System.in);  String s = sc.nextLine();  int x = sc.nextInt()  C:通过字符缓冲流包装标准输入流实现  BufferedRead

Java基础知识强化90:Date类之Data类概述及其方法

1. Date类概述 类Date表示特定的瞬间,精确到毫秒 2. 构造方法 public Date():根据当前默认毫秒值创建日期对象 public Date(long date):根据给定的毫秒值创建日期对象 3. 成员方法 public long getTime() public void setTime(long time) 4. 代码示例: 1 package cn.itcast_01; 2 3 import java.util.Date; 4 5 /* 6 * Date:表示特定的瞬间

java基础知识回顾之---java String final类普通方法的应用之“两个字符串中最大相同的子串”

/* * 3,两个字符串中最大相同的子串. * "qwerabcdtyuiop" * "xcabcdvbn" *  * 思路: * 1,既然取得是最大子串,先看短的那个字符串是否在长的那个字符串中. *   如果存在,短的那个字符串就是最大子串. * 2,如果不是呢,那么就将短的那个子串进行长度递减的方式取子串,去长串中判断是否存在. *   如果存在就已找到,就不用在找了. * 3.先找最大的子串,再递减子串找,找到,就停止 */ 原理图如图: 代码: publi

java基础知识回顾之---java String final类普通方法的应用之“子串在整串中出现的次数”

/* * 2 一个子串在整串中出现的次数. * "loveerlovetyloveuiloveoplove" * 思路: * 1,要找的子串是否存在,如果存在获取其出现的位置.这个可以使用indexOf完成. * 2,如果找到了,那么就记录出现的位置并在剩余的字符串中继续查找该子串, * 而剩余字符串的起始位是出现位置+子串的长度. * 3,以此类推,通过循环完成查找,如果找不到就是-1,并对 每次找到用计数器记录.  * 使用 indexOf()获取某个字符子串在整串中的位置,还使用

java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁

1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定.假设我们事先不知道同步函数用的是什么锁:如果在同步代码块中指定的某个锁(测试)和同步函数用的锁相同,就不会出现线程安全问题,如果锁不相同,就会发生线程安全问题. 看下面的代码:t1线程用的同步锁是obj,t2线程在操作同步函数的资源,假设不

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提

这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在运行,锁加在哪一块代码 那么我们要思考的地方有:1.知道我们写的哪些是多线程代码 2.明确共享数据 3.明确多线程运行的代码中哪些语句是操作共享数据的.. 4.要确保使用同一个锁. 下面的代码:需求:两个存户分别往银行存钱,每次村100块,分三次存完. class bank{ private int