种类:
普通排序、冒泡排序、选择排序、插入排序、java内置排序
1.冒泡排序:
将数组中相邻两个位置的数据实现对调获取最大值进行排序。
//冒泡排序
int[] a= {1,22,32,12,44};
//读取数组中的数据
for(int j=0;j<a.length;j++) {
for(int i=0;i<a.length-1;i++){
//将相邻的两个数对调
if(a[i]>a[i+1]) {
int temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
//获取数组中的所有数据 Arrays.toString(数组名)
System.out.println(Arrays.toString(a));
代码执行后的结果为:
[1, 12, 22, 32, 44]
2.Java内置排序:
Arrays.sort(数组名);//从小到大排序
//java内置排序
int[] a1= {1,22,32,12,44};
Arrays.sort(a1);//调用java内置的排序方法实现排序
System.out.println(Arrays.toString(a1));
代码执行后的结果为:
[2, 8, 55, 58, 69, 112]
3.选择排序
从待排序序列选择最小的元素与序列第1个元素交换;从剩下的元素中选择最小的缘续与序列第2个元素交换;依次类对直到最后一个元素。
public class 选择排序 {
public static void main(String[] args) {
// 定义一个整形数组
int []a= {2,66,98,55,1,4};
xuanzepaixu(a);
// 输出排序后数组中的数组
for(int i=0;i<a.length;i++) {
System.out.println(a[i]);
}
}
public static void xuanzepaixu(int []a) {
// 动态获取数组中的数据
for(int i=0;i<a.length-1;i++) {
// 定义最小数下标
int minindex=i;
for(int j=i+1;j<a.length;j++) {
// 如果数组中有值小于minindex,就把它赋值给minindex
if(a[j]<a[minindex]) {
minindex=j;
}
}
// 如果遇到值比minindex大,就交换他们的值
if(i !=minindex) {
int temp=a[i];
a[i]=a[minindex];
a[minindex]=temp;
}
}
}
}
代码执行后结果为:
1
2
4
55
66
98
4..插入排序
就是把待排序的数列分为了两部分,一部分已排好序,另一部分待排序;
插入排序的原理:
1.从第一个元素开始,该元素默认已经排好序
2.取出一个新的元素,将这个新元素在已经排好序的元素序列中从后向前进行比较
3.如果此时的元素大于新元素,就将这个元素放到下一个下标位置
4.如果此时的元素等于或者小于新元素,将新元素放在此时的元素后面
public class 插入排序 {
public static void main(String[] args) {
// 定义一个整形数组
int[] a= {15,888,55,7,4,1,58};
System.out.println("数组排序前:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
System.out.println();
// 调用插入排序的方法
charpaixu(a);
System.out.println("排序后:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
}
// 定义一个插入排序的方法
public static void charpaixu(int [] a) {
// 定义已排序好的下标
int j;
// 定义待排序的元素
int y;
// 动态获取数组a的数据
for(int i=1;i<a.length;i++) {
// 如果数组中前一个数大于后一个
if(a[i-1]>a[i]) {
// 就把值赋值给待排序的元素
y=a[i];
// 从后往前遍历,如果已经排序好的元素的值大于y,就把它后移
for(j=i-1;j>=0&&a[j]>y;j--) {
a[j+1]=a[j];
}
// 把值赋值给y
a[j+1]=y;
}
}
}
}
代码执行后的结果为:
数组排序前:
15 888 55 7 4 1 58
排序后:
1 4 7 15 55 58 888