二分法插入排序,簡稱二分排序,是在插入第i個元素時,對前面的0~i-1元素進行折半,先跟他們中間的那個元素比,如果小,則對前半再進行折半,否則對後半進行折半,直到left<right,然後再把第i個元素前1位與目標位置之間的所有元素後移,再把第i個元素放在目標位置上。
代碼
private static void binarySort() {
int [] a={15,27,36,53,69,42};
for (int i = 0; i < a.length; i++) {
int temp = a[i]; // 待插入的元素
int left = 0;
int right = i - 1;
int mid = 0;
while (left <= right) {
// 先獲取中間位置
mid = (left + right) / 2;
if (temp < a[mid]) {
// 如果值比中間值小,就要對摺的前面部分再對摺
right = mid - 1;
} else {
// 如果值比中間值大,就要對摺的右面部分再對摺
left = mid + 1;
}
}
for (int j = i - 1; j >= left; j--) {
a[j + 1] = a[j];
}
if (left != i) {
a[left] = temp;
}
}
}
時間複雜度:o(n^2)
由於用到了一個存儲變量temp,所以空間複雜度:o(1)