赞
踩
title: 折半插入排序
date: 2024-7-19 10:17:24 +0800
categories:
折半插入排序(Binary Insertion Sort)是插入排序的一种改进版本。它在插入每个元素时使用二分查找(Binary Search)来找到插入位置,从而减少比较次数。
设数组为a[0…n]。
假设有一个待排序的列表:[12, 11, 13, 5, 6]
[11, 12, 13, 5, 6]
[5, 11, 12, 13, 6]
[5, 6, 11, 12, 13]
折半插入排序通过减少比较次数来提高效率,但在元素移动次数上与普通插入排序一致。
以下是折半插入排序的Java实现代码:
public class BinaryInsertionSort { public static void binaryInsertionSort(int[] arr) { int n = arr.length; // 从数组的第二个元素开始遍历 for (int i = 1; i < n; i++) { int key = arr[i]; // 需要插入的元素 int left = 0; // 二分查找的左边界 int right = i; // 二分查找的右边界 // 使用二分查找找到插入位置 while (left < right) { int mid = (left + right) / 2; if (arr[mid] <= key) { left = mid + 1; // 在右半部分查找 } else { right = mid; // 在左半部分查找 } } // 将大于key的元素向后移动一位 for (int j = i; j > left; j--) { arr[j] = arr[j - 1]; } arr[left] = key; // 将key插入到正确的位置 } } public static void main(String[] args) { int[] arr = {12, 11, 13, 5, 6}; binaryInsertionSort(arr); for (int i : arr) { System.out.print(i + " "); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。