#算法排序(Java版)#冒泡排序、选择排序

来源:互联网 发布:淘宝网的营销策略 编辑:程序博客网 时间:2024/05/16 07:45

冒泡排序法

 

冒泡排序是一种相邻数据交换的排序的方法。


冒泡排序的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字比较小的记录将逐渐从后面想前面移动,就像气泡在水中向上浮一样,所以该算法也称为气泡排序。


冒泡排序算法的运作如下:

1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 

 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 

 3.针对所有的元素重复以上的步骤,除了最后一个。 

 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。


排序过程

假设有一数组arr[]{8,7,4,1,9,6}进行冒泡排序。

第一次排序的过程

下标

 

 

 

 

0

8

8

8

8

1

1

7

7

7

1

8

2

4

4

1

7

7

3

1

1

4

4

4

4

9

6

6

6

6

5

6

9

9

9

9

 

整个冒泡排序的过程


下标

 

 

 

 

 

 

 

 

 

0

8

1

1

1

1

1

7

8

4

4

4

2

4

7

8

6

6

3

1

4

7

8

7

4

9

6

6

7

8

5

6

9

9

9

9

 

核心算法:

(1)逆序

public static int[] BubbleSort(int[] arr){for(int i = 0;i<arr.length-1;i++){for(int j = arr.length-1;j>i;j--){if(arr[j]<arr[j-1]){int temp = arr[j-1];arr[j-1] = arr[j];arr[j] = temp;}}}return arr;}

(2)顺序

public static int[] BubbleSort_1(int[] arr){for(int i = 0;i<arr.length-1;i++){for(int j = 0;j<arr.length-i-1;j++){if(arr[j]>arr[j+1]){int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}return arr;}

个人建议选择第一种方法,即逆序,比较简单

 

 

简单选择排序法

选择排序的基本思想n个记录进行扫描,选择最小的记录,将其输出,接着在剩下的n-1个记录中扫描,选择最小的记录将其输出,不断重复这个过程,直到只剩一个记录为止。


选择排序的编程思想:

选择排序的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位置更小的元素,需要将这两个元素交换.


排序过程

假设有一数组arr[]{8,7,4,1,9,6}进行选择排序。


下标

 

 

 

 

 

 

0

8

1

1

1

1

1

1

7

7

4

4

4

4

2

4

4

7

6

6

6

3

1

8

8

8

7

7

4

9

9

9

9

9

8

5

6

6

6

7

8

9

 

核心代码:

public static int[] SelectSort(int[] arr){for(int i =0;i<arr.length-1 ;i++){int flag = i; for(int j = i+1;j<arr.length;j++ ){if(arr[flag]>arr[j]){flag = j;}}if(flag !=i){int temp =arr[i];arr[i] = arr[flag];arr[flag] = temp;}}return arr;}


0 0
原创粉丝点击