直接插入排序
将一个记录插入到已经排好序的有序表中,从而得到一个新的有序表。通俗理解,我们首先将序列分成两个区间,有序区间和无序区间,我们每次在无序区间内取一个值,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间一直有序。
class Zjcrpx{
public static int [] sortArray(int [] arr){
//
for (int i =1;i<arr.length ;i++ ) {
int temp = arr[i];//保存起来,否则后面移动位置会被覆盖
for(int j = 0;j<i;j++){
if(arr[j]>arr[i]){
//从索引j到i-1都向后移动一位,原来索引j位置为temp
for(int k =i-1;k>=j;k--){
arr[k+1]=arr[k];
}
arr[j] = temp;
}
}
}
return arr;
}
public static void main(String[] args) {
int [] arr = {6,9,7,10,4,9,1,12};
sortArray(arr);
for (int c :arr ) {
System.out.print(c+" ");
}
}
}
交换位置法
class Crpx{
public static void main(String[] args) {
int [] arr = {2,6,3,1,8,3,8};
int [] sort_arr =Charu(arr);
for (int c :sort_arr ) {
System.out.print(c+" ");
}
}
public static int [] Charu(int [] arr){
for (int i =0;i<arr.length ;i++ ) {
for(int j = i;j>0;j--){
if(arr[j-1]>arr[j]){
swap(arr,j,j-1);
}else{
break;
}
}
}
return arr;
}
public static void swap(int [] arr,int i ,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}