java针对1中构建的表r1,r2,r3实现直接插入排序、希尔排序、冒泡排序、简单选择排序和快速排序,并输出几种排序方法的比较次数,完整的不要忽略
时间: 2024-12-28 14:32:04 浏览: 12
在Java中,我们可以分别使用数组`r1`, `r2`, `r3`来演示五种排序算法,这里是简单的代码示例:
1. **直接插入排序**:
```java
int[] r1 = {9, 5, 2, 6, 3};
for (int i = 1; i < r1.length; i++) {
int key = r1[i];
int j = i - 1;
while (j >= 0 && r1[j] > key) {
r1[j + 1] = r1[j];
j--;
}
r1[j + 1] = key;
}
```
每次迭代都会比较当前元素与已排序部分的最大值,直到找到合适的位置,比较次数约为n(n-1)/2。
2. **希尔排序**:
```java
int[] r2 = {9, 5, 2, 6, 3};
for (int gap = r2.length / 2; gap > 0; gap /= 2) {
for (int i = gap; i < r2.length; i++) {
int temp = r2[i];
int j;
for (j = i; j >= gap && r2[j - gap] > temp; j -= gap)
r2[j] = r2[j - gap];
r2[j] = temp;
}
}
```
希尔排序通常包含几个步长,每一步会减小步长并进行插入排序,总比较次数取决于步长序列。
3. **冒泡排序**:
```java
int[] r3 = {9, 5, 2, 6, 3};
for (int i = 0; i < r3.length - 1; i++) {
for (int j = 0; j < r3.length - 1 - i; j++) {
if (r3[j] > r3[j + 1]) {
int temp = r3[j];
r3[j] = r3[j + 1];
r3[j + 1] = temp;
}
}
}
```
冒泡排序通过相邻元素的反复比较和交换,最多轮数n(n-1)/2次。
4. **简单选择排序**:
```java
int[] r3 = {9, 5, 2, 6, 3};
for (int i = 0; i < r3.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < r3.length; j++) {
if (r3[j] < r3[minIndex]) {
minIndex = j;
}
}
int temp = r3[i];
r3[i] = r3[minIndex];
r3[minIndex] = temp;
}
```
这里每次查找最小元素需要遍历未排序部分,总共n*(n-1)/2次。
5. **快速排序**:
```java
int[] r3 = {9, 5, 2, 6, 3};
Arrays.sort(r3); // Java内置方法,无需手写快速排序
```
快速排序平均情况下的比较次数接近n log n,但最坏情况下是n^2。
关于比较次数,以上排序法的详细对比通常是基于特定输入和步长序列(如希尔排序),实际比较次数可能会有所不同。以上代码仅给出基本的排序过程,不包括详细的比较计数。
阅读全文