理论就不多说了,直接看代码吧。有些解释就直接注释在代码中了。
package arithmetic;
import java.util.Arrays;
/*插入排序是最简单的排序方法,是一堆数,一个个来加入到新的数组中,即这个新数组原本是没有一个数,从一堆数中取一个数放进去,然后再取一个数,
* 比较,大的放后面,小的放前面,以此类推,这种排序消耗的是来一个数和新数组的所有数进行比较,可以知道其时间复杂度是O(n*n)。插入排序的核心
* 地方在于如何与新数组中的数进行比较,然后交换位置,首先,这个算法包含两个for循环,第一个for表达的是插入的数的个数,
* 第二个for循环是为了判断,前一堆数和新插入的数的大小比较,下面看核心部分的代码,
*
*/
public class InsertSort {
public static void sort(int[] arr,int n){
int temp;
//因为是要和第一个数相比,所以,取值取第二个,即下标为1
for(int i=1;i<n;i++){
temp=arr[i];
int k;
//从k=i开始,向前比较知道因为每次都是比较到第一个为止,
for(k=i;k>0&&arr[k-1]>temp;k--){
arr[k]=arr[k-1];//如果每次都是前一个比后一个大,那么比较到最后,总是后替换前
}//假设没有这个for,那么接下里的交换就是自己和自己交换了。
arr[k]=temp;//插入到最适合的那个数的后面
}
}
public static void main(String[] args){
int[] arr=new int[] {2,1,3,4,8,7,6,5};
//Arrays.toString方法将数组转换成String
System.out.println("排序之前:"+Arrays.toString(arr));
sort(arr,arr.length);
System.out.println("排序之前:"+Arrays.toString(arr));
}
}