查找与排序问题:在一个整型数组中(长度至少为100001,其中下标0处留作它用),随机生成待查找与排序的数据,实现起泡排序,简单选择排序,直接插入排序,二分非递归查找以及带哨兵的顺序查找算法,并完成简单计时功能 用java编写
时间: 2024-12-24 20:34:05 浏览: 3
快速查找数组中的某个元素并返回下标示例
在Java中,我们可以使用`Random`类生成随机整数,然后创建一个大数组(如`int[] array = new int[100001]`)。接下来,我们将分别实现起泡排序、简单选择排序、直接插入排序、二分查找和顺序查找算法,同时使用`System.currentTimeMillis()`函数来进行简单的计时。
```java
import java.util.Random;
import java.util.Arrays;
public class SortingAndSearching {
private static final Random random = new Random();
// 1. 起泡排序
public static void bubbleSort(int[] array) {
long startTime = System.currentTimeMillis();
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
long endTime = System.currentTimeMillis();
System.out.println("Bubble sort time: " + (endTime - startTime) + "ms");
}
// 2. 简单选择排序
public static void selectionSort(int[] array) {
// ... (类似起泡排序的嵌套循环实现)
}
// 3. 直接插入排序
public static void insertionSort(int[] array) {
// ... (遍历数组并插入元素到已排序部分的位置)
}
// 4. 二分查找
public static int binarySearch(int[] sortedArray, int target) {
long startTime = System.currentTimeMillis();
// ... (实现二分查找逻辑)
long endTime = System.currentTimeMillis();
System.out.println("Binary search time: " + (endTime - startTime) + "ms");
}
// 5. 带哨兵的顺序查找
public static int sentinelSearch(int[] array, int target, int sentinel) {
long startTime = System.currentTimeMillis();
// ... (在数组开头添加哨兵,然后遍历查找)
long endTime = System.currentTimeMillis();
System.out.println("Sentinel search time: " + (endTime - startTime) + "ms");
}
// 主函数用于测试
public static void main(String[] args) {
int[] array = generateRandomArray(100001);
// 对每个排序和查找算法进行测试...
}
// 随机数组生成
private static int[] generateRandomArray(int length) {
for (int i = 0; i < length; i++) {
array[i] = random.nextInt(length * 10); // 避免全数组都是相同的值
}
return array;
}
}
```
在这个示例中,每个排序和查找方法都会记录开始时间和结束时间,然后计算并打印出各自操作所需的时间。你可以根据需要替换这些方法的具体实现。注意,为了演示效率,这里没有提供完整的查找算法实现,实际项目中你需要填充适当的逻辑。
阅读全文