java三种排序,冒泡,插入,选择

1.冒泡排序原理

  比较两个相邻的元素,将值大的元素交换至右端

 1  int a[] = new int[]{2, 6, 45, 54, 6, 8, 9, 12, 45, 6546, 13, 134, 13, 156, 48, 2};
 2 
 3         int min;
 4         int x = 0;
 5 
 6         for (int i = 0; i < a.length; i++) {
 7             for (int j = 0; j < a.length - 1 - i; j++) {
 8                 x++;
 9                 if (a[j] > a[j + 1]) {
10                     min = a[j + 1];
11                     a[j + 1] = a[j];
12                     a[j] = min;
13 
14                 }
15                 System.out.println(x + "次");
16             }
17         }
18         for (int i = 0; i < a.length; i++) {
19             System.out.print(a[i] + ",");
20 
21         }
22         System.out.println();

2.插入排序

    插入排序类似于洗牌的过程,前面的数组默认是正序的,然后从后面的数组中开始抽牌插入到前面的数组中,如果比前面的大直接就是当前位置,如果比前面的一个小,

继续向前比较,直到找到比前面的大的,插入到当前位置

   但和插入扑克牌有一点不同,不可能在两个相邻的存储单元之间再插入一个单元,因此要将插入点之后的数据依次往后移动一个单元。也就是代码18行

  代码实现:

 1   /**
 2          * 插入排序
 3          */
 4         int b[] = new int[]{2, 6, 45, 54, 6, 8, 9, 12, 45, 6546, 13, 134, 13, 156, 48, 2};
 5 
 6 
 7         int i, j;
 8         int n = b.length;
 9         int target;
10 
11         //假定第一个元素被放到了正确的位置上
12         //这样,仅需遍历1 - n-1
13         for (i = 1; i < n; i++) {
14             j = i;
15             target = b[i];
16 
17             while (j > 0 && target < b[j - 1]) {
18                 b[j] = b[j - 1];
19                 //b[j-1]=target;
20                 j--;
21             }
22 
23 
24             b[j] = target;
25         }
26         for (int i1 = 0; i1 < b.length; i1++) {
27             System.out.print(b[i1] + ",");
28         }

3.选择排序

  选择排序就是进行n-1轮比较 每轮比较至多交换一次 先设最小值为本轮比较初始值 然后比这个值小的就变为最小值,
最后那个肯定是本轮最小值的坐标,然后看初始最小值和最后的最小值得坐标是否相同,若不同则交换位置,相同则不交换

 1  int a[]=new int[]{3,21,12,5,5,47,564,64,13,48,12,3,4,5,3,87,54,98};
 2         for(int i=0; i<a.length-1; i++){
 3             int min=a[i];//最小的数
 4             int minIndex=i ;
 5             for(int j=i+1;j<a.length;j++){//从第二个数开始循环比较
 6                 if(a[j]<min){//如果后面的小于最小的
 7                     min=a[j];//改变最小数的值
 8                     minIndex=j;
 9                 }
10             }
11             //最小数跟第i位置上的交换   所以要记录下标
12             int temp = a[i];
13             a[i] = min;
14             a[minIndex] = temp;
15         }
16 
17         for (int i=0;i<a.length;i++){
18             System.out.print(a[i]+",");
19         }

总结:插入排序算法比冒泡快一倍,比选择排序略快一点,但这些算法都是O(N2)的时间级别。

猜你喜欢

转载自www.cnblogs.com/zxqflying/p/10417172.html