java循环语句怎样计算结果_Java循环语句怎么用?经典排序算法见真知

Java中循环语句的使用,莫过于在排序算法中使用得最为经典。

排序算法非常的多,不过大体可以分为两种:

一种是比较排序,主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。

另一种是非比较排序,主要有:计数排序,基数排序,桶排序等。本文主要讲解三大经典比较排序,了解其排序思想及代码实现。

下面通过对冒泡排序,选择排序,插入排序分析。使用最简洁最经典的循环语句实现对数据的排序。

一、冒泡排序(BubbleSort)

冒泡排序的原理:比较两个相邻的元素,将值大的元素交换至右端。

冒泡排序的基本思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。

第一趟比较完成后,最后一个数一定是数组中最大的一个数,所以第二趟比较的时候最后一个数不参与比较;

第二趟比较完成后,倒数第二个数也一定是数组中第二大的数,所以第三趟比较的时候最后两个数不参与比较;

依次类推,每一趟比较次数-1;

……

图解分析:

a2187aa7be492ccd9ac6b7cb64b3822e.png

Java代码实现:

1 public static void bubbleSort(int[] arr) {2 for(int i=0;i

3 for(int j=0;j

4 if(arr[j+1]

5 int temp=arr[j];6 arr[j]=arr[j+1];7 arr[j+1]=temp;8 }9 }10 }11 }

二、选择排序(SelectSort)

选择排序的原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。(这里只介绍常用的简单选择排序)

简单选择排序的基本思想:给定数组:int[] arr={里面n个数据};第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,将它与arrr[1]交换;第2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,将它与r[2]交换;以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与r[i]交换,直到全部排序完成。

图解分析:

7f48bcf5c7f38cfaefadf5d2838392c0.png

Java代码实现:

1 public static void selectSort(int[] arr) {2 for(int i=0;i

3 int k=i; //假设arr[0]为最小值

4 for(int j=k+1;j

5 if(arr[j]

6 k=j;7 }8 }9 if(i!=k) { //如果当前的值下标非i为k,则进行进行交换下标为i与k的值(当前处于外层循环)

10 int temp=arr[i];11 arr[i]=arr[k];12 arr[k]=temp;13 }14 }15 }16 }

三、插入排序(InsertSort)

直接插入排序的原理:对于给定的一个数组,初始时假设第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列中为止。

图解分析:

9f90205d004572d6d9dcef4fb747f7ce.png

Java代码实现:

1 public static void insertSort(int[] arr) {2 for(int i=1;i

3 for(int j=i;j>0;j--) { //内层循环

4 if(arr[j]

5 int temp=arr[j-1];6 arr[j-1]=arr[j];7 arr[j]=temp;8 }9 }10 }11 }

最后我把三大排序算法写入一个Sort类中:

1 public classSort {2

3  //冒泡排序方法

4 public static void bubbleSort(int[] arr) {5 for(int i=0;i

6 for(int j=0;j

7 if(arr[j+1]

8 int temp=arr[j];9 arr[j]=arr[j+1];10 arr[j+1]=temp;11 }12 }13 }14 for (inti : arr) {15 System.out.print(i+" ");16 }17 }18

19 //选择排序方法

20 public static void selectSort(int[] arr) {21 for(int i=0;i

22 int k=i; //假设arr[0]为最小值

23 for(int j=k+1;j

24 if(arr[j]

25 k=j;26 }27 }28 if(i!=k) { //如果当前的值下标非i为k,则进行进行交换下标为i与k的值(当前处于外层循环)

29 int temp=arr[i];30 arr[i]=arr[k];31 arr[k]=temp;32 }33 }34 for (inti : arr) {35 System.out.print(i+" ");36 }37 }38

39  //插入排序方法

40 public static void insertSort(int[] arr) {41 for(int i=1;i

42 for(int j=i;j>0;j--) { //内层循环

43 if(arr[j]

44 int temp=arr[j-1];45 arr[j-1]=arr[j];46 arr[j]=temp;47 }48 }49 }50 for (inti : arr) {51 System.out.print(i+" ");52 }53 }54 }

接下来,书写一个Test类:

1 public classTest {2 public static voidmain(String[] args) {3 int[] arr=new int[] {9,6,11,4,3,1,7}; //此数组可自行更改

4 System.out.println("原数组为:");5 for (inti : arr) {6 System.out.print(i+" ");7 }8 System.out.println("\n使用冒泡排序的结果为:");9 Sort.bubbleSort(arr); //调用Sort类的bubbleSort()方法

10 System.out.println("\n使用选择排序的结果为:");11 Sort.selectSort(arr); //调用Sort类的selectSort()方法

12 System.out.println("\n使用插入排序的结果为:");13 Sort.insertSort(arr); //调用Sort类的insertSort()方法

14 }15 }

测试结果:

原数组为:

9 6 11 4 3 1 7

使用冒泡排序的结果为:

1 3 4 6 7 9 11

使用选择排序的结果为:

1 3 4 6 7 9 11

使用插入排序的结果为:1 3 4 6 7 9 11

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值