1、從陣列的第二個元素進行操作,如果發現其前面的元素比他大,就將其前面的元素往後挪,直到cur指向的元素大於或等於他前一個元素,此時cur所指向的位置就是要插入元素應該插入的位置。
static int[] insertSort2(int[] array){ int len = array.length; for (int begin = 1; begin < len; begin++){ int cur = begin; int tmp = array[cur]; while (cur > 0 && array[cur] < array[cur-1]){ array[cur] = array[cur-1]; cur--; } array[cur] = tmp; } return array; }
2、透過二分查找減少了比較次數,即cmp函數的呼叫,也減少了swap函數的呼叫。更快的找到了當前元素應該插入的位置,然後再進行挪動,提高了效率。
static int[] insertSort3(int[] array){ int len = array.length; for (int begin = 1; begin < len; begin++){ int v = array[begin]; int insertIndex = search(array,begin); // 将 [insertIndex, begin) 范围内的元素往右边挪动一个单位 for (int i = begin; i > insertIndex; i--){ array[i] = array[i-1]; } array[insertIndex] = v; } return array; } static int search(int[] array, int index){ int begin = 0; int end = index; while(begin < end){ int mid = (begin+end) >> 1; if (array[index] < array[mid]){ end = mid; }else{ begin = mid+1; } } return begin; }
以上是java數組插入元素並且快速排序的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!