飞道的博客

Java零基础进阶篇之数组|数组的排序

373人阅读  评论(0)

本篇文章讲解的知识点主要围绕数组,废话不多说,只分享Java相关的干货!

冒泡排序

假设有 5 个数字 31625 在一个 int 数组中,要求按从小到大排序输出如何采用冒泡排序算法呢?

冒泡排序的算法是这样的,首先从数组的最左边开始,取出第 0 号位置(左边)的数据和第1号位置(右边)的数据,如果左边的数据大于右边的数据,则进行交换,否而不进行交换。接下来右移一个位置,取出第 1 个位置的数据和第 2 个位置的数据,进行比较,如果左边的数据大于右边的数据,则进行交换,否而不进行交换。沿着这个算法一直排序下去,最大的数就会冒出水面,这就是冒泡排序。

以上示例排序过程如下:

第一遍排序

 

从上面我们看到了比较了 N-1 次,那么第二遍就为 N-2 次比较了,如此类推,比较次数的公式如下:

(N-1) + (N-2)+...+1=((N-1)*N)/2

所以以上总共比较次数为((5-1)*5)/2=10

以上就是冒泡排序算法


   
  1. public class ArraySortTest01 {
  2. public static void main(String[] args) {
  3. int[] data = { 3, 1, 6, 2, 5};
  4. for ( int i=data.length- 1; i> 0; i--)
  5. { for ( int j= 0; j<i; j++) {
  6. if (data[j] > data[j+ 1])
  7. { int temp = data[j];
  8. data[j] = data[j+ 1];
  9. data[j+ 1] = temp;
  10. }
  11. }
  12. }
  13. for ( int i= 0; i<data.length; i++)
  14. { System.out.println(data[i])
  15. ;
  16. }
  17. }
  18. }

选择排序

选择排序对冒泡排序进行了改进,使交换次数减少,但比较次数仍然没有减少。

假设有 5 个数字 31625 在一个 int 数组中,要求按从小到大排序输出采用选择排序,选择排序是这样的,先从左端开始,找到下标为 0 的元素,然后和后面的元素依次比较,如果找到了比下标 0 小的元素,那么再使用此元素,再接着依次比较,直到比较完成所有的元素,最后把最小的和第 0 个位置交换。

以上示例排序过程如下:

第一遍排序

 
 

 

第二遍排序将从下标为 1 的元素开始,以此类推,经过 N(N-1)/2 次比较,经过 N 次数据交互就完成了所有元素的排序。

【示例代码】


    
  1. public class ArraySortTest02 {
  2. public static void main(String[] args) {
  3. int[] data = { 3, 1, 6, 2, 5};
  4. for ( int i= 0; i<data.length; i++)
  5. { int min = i;
  6. for ( int j=i+ 1; j<data.length; j++)
  7. { if (data[j] < data[min]) {
  8. min = j;
  9. }
  10. }
  11. //进行位置的交换
  12. if (min != i) {
  13. int temp = data[i];
  14. data[i] = data[min];
  15. data[min] = temp;
  16. }
  17. }
  18. for ( int i= 0; i<data.length; i++)
  19. { System.out.println(data[i]);
  20. }
  21. }
  22. }

以上就是数组相关的知识点了,配套视频教程👇,正在学习Java的同学们一定要持续关注哦~~

Java零基础进阶视频教程

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载:https://blog.csdn.net/bjpowernode_com/article/details/112311508
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场