冒泡排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Arrays;

public class TestSort {

//冒泡排序算法将参数指定的数组元素进行排序
public static void bubble(int[] arr){
//1.使用外层for循环来控制比较的轮数
for(int i = 1; i < arr.length; i++){
//声明boolean类型的变量作为标志位
boolean flag = true;
//2.使用内层for循环来控制针对当前轮比较的次数
for(int j = 0; j < arr.length-i; j++){
//3.若第一个元素比第二个元素大,则交换两个元素的位置
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = false;
}
}
//若该位置flag的数值还是true,则证明本轮比较中没有发生任何的交换
if(flag) break;
}
}

快速排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
	//快速排序算法实现
public static void quick(int[] arr, int left, int right){
//1.计算中间元素的下标并使用该元素作为基准值单独保存
int p = (left+right)/2;
int pivot = arr[p];
//2.分别使用左右两边的元素依次与基准值比较大小,将所有小于基准值的元素放在左边,
// 将所有大于等于基准值的元素放在右边
int i = left;
int j = right;
for( ; i < j; ){
//若左边有元素并且左边元素小于基准值时,则使用下一个元素与基准值比较
while(i < p && arr[i] < pivot){
i++;
}
//直到左边有元素但左边元素不再小于基准值时,则将该元素放到p指向的位置
//p指向该元素原来的位置
if(i < p){
arr[p] = arr[i];
p = i;
}
//若右边有元素并且右边元素大于等于基准值时,则使用下一个元素比较
while(j > p && arr[j] >= pivot){
j--;
}
//直到右边有元素但右边元素不再大于等于基准值时,则将该元素放到p指向的位置
//p指向该元素原来的位置
if(j > p){
arr[p] = arr[j];
p = j;
}
}
//3.直到左右两边元素的下标重合时,将基准值放到重合的位置
arr[p] = pivot;
//4.使用递归的思想分别对左右两边的分组进行再次分组
if(p - left > 1){
quick(arr, left, p-1);
}
if(right - p > 1){
quick(arr, p+1, right);
}
}

public static void main(String[] args) {

int[] arr = {20, 10, 25, 5, 15, 30, 8, 20, 3};
//调用排序算法实现排序
//TestSort.bubble(arr);
//TestSort.quick(arr, 0, arr.length-1);
Arrays.sort(arr);
//打印排序后数组中的所有元素
System.out.print("排序后的结果是:");
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
System.out.println();
}

}


11月      Java

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!