public static void sort(Comparable arr[]) {
int n = arr.length;
// for (int i = 0; i < n; i++) {
// for( int j = i; j > 0 && arr[j].compareTo(arr[j-1]) < 0 ; j--)
// swap(arr, j, j-1);
//
//两种写法 }
int j=0;
for(int i =1;i<n;i++) {
int key = (int)arr[i];
j =i-1;
while(j>=0 && arr[j].compareTo(key)>0 ) {
arr[j+1] = arr[j];
j--;
}
arr[j+1] =key;
}
}
/
/* private static void swap(Object[] arr, int i, int j) {
Object t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}*/
选择排序的思想,好比打扑克牌时,摸到牌后,人对牌的大小的排序。
通常是以第二张牌为起始牌进行排序。
索引位置的元素对其前面的元素进行比较,进入应该插入的位置。其似乎与选择排序有点相似。
没错,但是选择排序是机械的比较,直到arr[0],停止交换元素位置。
而插入排序是先与前面的元素比较大小,如果正好比前面大或者小,就不用交换位置。
这就像打扑克时,摸到一张10手牌,假设此时手上 3 4 5 6 7 8 9 J Q K,我们会自然而然的插入到9的后面,组成 3 4 5 6 7 8 9 10 J Q K,而算法,在知道10大于9后,就会停止这一次的循环。
所以,在对近乎有序的数组进行排序时,插入排序是一个十分推荐的排序算法。