2020.2.7
13:30
插入排序:
思路:从第一个值开始,向前面的插入,后面的数字在向前面插入的时
候,前面的数字一定已经排好序了,找一个位置将这个数再放入到正确
的位置。
注:(上面的那张图片和下面那个gif,是我保存的别人的,仅仅只是为了好理解,并没有其他的意思。)
代码演示:
public static void main(String[] args) {
int []a= {3,8,2,56,21,23};
System.out.println("排序之前:");
for(int i=0 ;i<a.length;i++) {
System.out.print(a[i]+" ");
}
for(int i=0;i<a.length;i++) { //遍历每一个数
for(int j=i; j>0; j-- ) { //将a[i]向前移动,移动到前面的数比它小或者前面没有数的时候停下来
if(a[j]<a[j-1]) {
int temp=a[j]; //交换数
a[j]=a[j-1];
a[j-1]=temp;
}else {
break;
}
}
结果:
改写为递归的形式
思路:对数组的排序=对数组中0到倒数第二个元素排序+倒数第一个元
素插入到这个有序的部分中去。并且,,记住每一个递归的步骤:
①:找重复 ②:设参数 ③:找出口
代码演示:
public static void sort(int []arr,int k) {
if(k==0) { //递归的出口
return; //第一个元素不用去排序
}
sort(arr,k-1); //对从0到倒数第二个元素排序
int x=arr[k];
int index=k-1; //设置指针
while(index>-1&& x<arr[index]) { //对最后一个元素进行插入
arr[index+1]=arr[index]; //交换
index--;
}
arr[index+1]=x; //指针的边界
}
结果:
草稿:
两种方法比较代码演示:
package LanQiaoKnowledgePractise;
//插入排序
public class insertionSortingTest {
public static void sort(int []arr,int k) {
if(k==0) { //递归的出口
return; //第一个元素不用去排序
}
sort(arr,k-1); //对从0到倒数第二个元素排序
int x=arr[k];
int index=k-1; //设置指针
while(index>-1&& x<arr[index]) { //对最后一个元素进行插入
arr[index+1]=arr[index]; //交换
index--;
}
arr[index+1]=x; //指针的边界
}
//从第一个数字开始向前插入,后面的数字在向前插入的时候,前面的数字一定已经排好序了,找一个位置将这个数放入正确的位置
public static void main(String[] args) {
int []a= {3,8,2,56,21,23};
System.out.println("排序之前:");
for(int i=0 ;i<a.length;i++) {
System.out.print(a[i]+" ");
}
for(int i=0;i<a.length;i++) { //遍历每一个数
for(int j=i; j>0; j-- ) { //将a[i]向前移动,移动到前面的数比它小或者前面没有数的时候停下来
if(a[j]<a[j-1]) {
int temp=a[j]; //交换数
a[j]=a[j-1];
a[j-1]=temp;
}else {
break;
}
}
}
System.out.println();
System.out.println("排序之后:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
System.out.println("*****************************");
int []arr= {52,32,21,45,12,32,5};
System.out.println("*******排序前***********************");
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("**************排序后****************************");
sort(arr,6);
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
}
收工午休