排序算法一

常见排序算法 一 (冒泡排序、选择排序、插入排序)

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
59
60
61
62
63
64
65
66
67
68
69
package com.day02;

import java.util.Arrays;

/**
* @author threee
* @date 2020/2/12 - 12:35
* 排序算法 (冒泡排序、选择排序、插入排序)
* 冒泡与选择的区别:
* 1、冒泡排序是比较相邻两位 ary[j] 和 ary[j+1]
* 2、选择排序是每一轮 其他的数和每轮的第一个数比 ary[i] 和 ary[j]
*/
public class Arry2Demo {
public static void main(String[] args) {
int[] ary = new int[]{11,2,6,3,9,1,323,124,45,24,67,32 };
//bull(ary);
//select(ary);
insert(ary);
System.out.println(Arrays.toString(ary));
}
//冒泡排序
public static void bull(int[] ary){
for (int i=0; i<ary.length-1; i++){ //i控制轮数
for (int j=0; j<ary.length-1-i ; j++){//j控制元素下标
if (ary[j]>ary[j+1]){ //相邻两个元素比
int t = ary[j+1];
ary[j+1] = ary[j];
ary[j] = t;
}
}
}
}
//选择排序 每一轮 其他的数和每轮第一个数比
public static void select(int[] ary){
for (int i=0; i<ary.length-1; i++){ //i控制轮数
for (int j=i+1; j<ary.length; j++){//j控制元素
if (ary[i]>ary[j]){ //i和j比
int t = ary[j];
ary[j] = ary[i];
ary[i] = t;
}
}
}
}
//插入排序
/* 把数组分两半,从第二个元素起为右半部分(取数快,比较数慢,所以左边只留一个,提高效率)
* 拿右半部分的每个元素取出来
* 和左半部分进行比较
* 再插入到左半部分相应的位置
**/
public static void insert(int[] ary){
//首先从第二个元素开始拆俩半
//左半部分一开始只有一个数
int j = 0;
//右半部分循环
for (int i=1; i<ary.length; i++){
//把右半的元素取出来,t要放在第二层for循环外
//因为t要和每个左边的元素比
int t = ary[i];
//左边循环
for (j=i-1; j>=0; j--){
if (t<ary[j]){ //t和每个j比,如果比t大,j向右移动一位
ary[j+1] = ary[j];
ary[j] = t;
}
}
}
}
}
文章作者: 刘山
文章链接: http://threee-hub.github.io/2020/02/13/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E4%B8%80/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 刘山的博客