编程题
现在有一个数组{ 1, 22, 13,45,2,7,4,66,13},要求给此数组中的值从小到大排序,并打印出来。
import java.util.*;
public class Main {
public static void main(String[] args) {
int a[]={1,22,13,45,2,7,4,66,13};
sortWithInsert(a);
System.out.println(Arrays.toString(a));
}
public static void sort(int a[]){//选择排序
for(int i=0;i<a.length-1;i++){
for(int j=i+1;j<a.length;j++){
if(a[i]>a[j]){
int t=a[j];
a[j]=a[i];
a[i] = t;
}
}
}
}
public static void sortWithInsert(int a[]){
int t,j;
for(int i=1;i<a.length;i++){
t=a[i];
for(j=i-1;j>=0;j--){
if(t<a[j]){
a[j+1]=a[j];
}
else{
break;
}
}
a[j+1]=t;
}
}
}
选择排序,选a[0],与a[1]到a[n]比较,小的放到a[0]。一次循环选出了最小值,剩下的乱序。n-1次循环解决问题。
插入排序,将a[0]视为已排序队列。选a[1],若比a[0]小插到a[0]处,比a[0]大放到a[0]后。一次循环将a[0],a[1]局部排完。n-1次解决问题。
1.临时变量t存值,a[j+1]=a[j]将值覆盖;
2.对于已排序队列由后往前遍历,遇见一个不妥移动一次,可省去一层循环
冒泡排序,元素两两比较。一次循环选出最值。n-1次解决问题。
两层循环的条件:
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1-i;j++){