三大排序
选择排序
public class Test2 {
public static void main(String[] args) {
int[]ary={8,3,5,1,4,2,7};
for(int i=0;i<ary.length-1;i++)//n-1趟
for(int j=i+1;j<ary.length;j++){
if(ary[i]>ary[j]){
int temp=ary[i];
ary[i]=ary[j];
ary[j]=temp;
}
}
// for(int i=0;i<ary.length;i++)
//System.out.print(ary[i]+"");
// Arrays.sort(ary);
// System.out.println();
// for(int i=0;i<ary.length;i++)
//System.out.print(ary[i]+"");
System.out.println(Arrays.toString(ary));//把数组转换成字符串[1,2,3,4,5,7,8]输出
}
}
冒泡排序
public static void main(String[] args) {
int[]ary={8,3,5,1,4,2,7};
for(int i=0;i<ary.length-1;i++)//n-1趟
for(int j=0;j<ary.length-i-1;j++){
if(ary[j]>ary[j+1]){
int temp=ary[j];
ary[j]=ary[j+1];
ary[j+1]=temp;
}
}
System.out.println(Arrays.toString(ary));
String[] names={"捞月","打开大奔放猪","宝马作者","东西游使者"};
names=bubbleSort(names);
System.out.println(Arrays.toString(names));
}
public static String[] bubbleSort(String[] names){
for(int i=0;i<names.length;i++){
for(int j=0;j<names.length-i-1;j++){
if(names[j].length()>names[j+1].length()){
String temp=names[j];
names[j]=names[j+1];
names[j+1]=temp;
}
}
}
return names;
}
}
插入排序
public class Test4 {
public static void main(String[] args) {
int[]ary={8,3,5,1,4,2,7};
ary=insertSort(ary);
System.out.println(Arrays.toString(ary));
}
/*
public static int[]insertSort(int[]ary){
//后组的每一个数据ary[i]插入到前部已经排好序组中
for(inti=1;i<ary.length;i++){
//取出后组中的第一个数
int j;//找到插入位置
int temp=ary[i];
for(j=i-1;j>=0;j--){//从i的前面倒序查找位置
if(temp<ary[j]){//需要移动条件
ary[j+1]=ary[j];//向后移动
}else{//不满足移动条件 就是插入位置(j+1)
break;
}
}
ary[j+1]=temp;//在位置上插入这个数
}
return ary;
}*/
下面这种更简洁,效率更高
public static int[] insertSort(int[] ary){
//后组的每一个数据ary[i]插入到前部已经排好序组中
for(int i=1;i<ary.length;i++){//n-1趟
//取出后组中的第一个数
int j;//找到插入位置
int temp=ary[i];
for(j=i-1;j>=0&&temp<ary[j];j--){//从i的前面倒序查找位置
//需要移动条件
//比上面精简,效率更高
ary[j+1]=ary[j];//向后移动
//不满足移动条件 就是插入位置(j+1)
}
ary[j+1]=temp;//在位置上插入这个数
}
return ary;
}
}