算法

冒泡排序

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
/**
* Created by Neko~ on 2017/4/10.
*/
public class alg1 {
private static int[] data={9,16,27,23,30,49,21,35};
public static void bubbleSort(){
System.out.println("开始排序");
int arraylength = data.length;
for(int i = 0; i<arraylength-1; i++){ //-1的原因是最大的数不用排了
boolean flag = false; //用于记录数组是否进行了排序,如果为false说明数组是按数字大小顺序排列的
for (int j = 0; j < arraylength-1 -i ;j++){//-1-i是因为这些数已经排好放在最后了,不用再排序
if (data[j] - data[j+1] > 0){
//如果前面的数比后面的数大,交换
int tmp = data[j + 1];
data[j + 1] = data [j];
data[j] = tmp;
flag = true;
}
}
System.out.println(java.util.Arrays.toString(data));
if(!flag){
System.out.println("没有进行排序");
}
}
}

public static void main(String[] args) {
bubbleSort();
}
}

快速排序

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
/**
* Created by Neko~ on 2017/4/10.
*
* 快速排序
*/
public class alg2 {
public static void main(String[] args) {
int[] nums = {49,38,65,97,76,13,27};
//使用 快速排序方法
quickSort(nums, 0, nums.length-1);
//显示排序之后的数组
System.out.println(java.util.Arrays.toString(nums));
}

//data:要进行排序的数组
//start:选取的第一个数,作为索引号,在这里就是49,用这个数和其他数进行比较
//end:最后一个元素,这里是索引号,27
public static void quickSort(int[] data,int start ,int end){
int i = start;//相当于i,左索引
int j = end;//相当于j,右索引
if(i >= j){//判断索引到达中间
//此处的return是每个递归的退出条件,之后退出
return;
}
//设置指针方向的逻辑变量,就是从左搜索还是从右搜索
boolean flag = true;//false:从左至右 true:从右至左
while (i!=j){
//如果i=j证明第一次排序结束,每次的标准值只是一个,比如第一波的比较值是49
if(data[i] >data[j]){
//交换数字
//所有比它小的数据元素一律放到左边,所有比它大的数据一律放到右边
int temp = data[i];
data[i] = data[j];
data[j] = temp;
//数据交换后才可以将游标的移动位置改变
//交换之后,游标就需要改变了
flag = (flag ==true) ? false : true ;
}
//将指针向前或者向后移动,第一次从左向右,第二次从右向左
if(flag) {//true 右--》向左
j--;
}else{//false 左--》向右
i++;
}
}
//到此,数组的数据排列位置为:
//第一次到该位置,data的值为:[27,38,13,49,76,97,65]
//将数组分开两半,确定每个数字的正确位置
//i=3 j=3
i--;
j++;
//i=2 j=4 start=0 end=6
//也就是说中间的49被分割出来,这个49其实是已经排好位置的数字了
//进行递归操作
quickSort(data,start,i);//也就是27 38 13的快速排序
quickSort(data,j,end);//也就是76 97 65的快速排序
}
}
#
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×