使用典型排序算法(冒泡排序、插入排序和选择排序,3选2),对数组int[] nums = {10,4,56,32,78,-5,1,40,99,63}进行升序和降序排序详细
时间: 2024-10-23 22:04:48 浏览: 23
当然,这里有三种常见的排序算法 - 冒泡排序、插入排序和选择排序,我会分别介绍它们如何对给定的整数数组 `nums` 进行升序和降序排列。
### 1. 冒泡排序 (Ascending)
**升序冒泡排序:**
- 比较相邻元素并交换如果它们的顺序错误(即较大的元素在前)
- 重复这个过程直到整个序列都有序
```java
void bubbleSort(int[] nums, boolean ascending) {
int n = nums.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (ascending ? nums[j] > nums[j + 1] : nums[j] < nums[j + 1]) {
// 交换
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
}
```
### 2. 插入排序 (Ascending & Descending)
**插入排序:**
- 将未排序的元素逐个插入到已排序的部分,保持有序
- 对于每个元素,从后向前比较,找到合适的位置插入
```java
void insertionSort(int[] nums, boolean ascending) {
for (int i = 1; i < nums.length; i++) {
int key = nums[i];
int j = i - 1;
if (ascending) {
while (j >= 0 && nums[j] > key) {
nums[j + 1] = nums[j];
j--;
}
} else {
while (j >= 0 && nums[j] < key) {
nums[j + 1] = nums[j];
j--;
}
}
nums[j + 1] = key;
}
}
```
### 3. 选择排序 (Ascending & Descending)
**选择排序:**
- 找到最小/最大的元素并将它放到正确位置
- 重复这个过程直到整个数组有序
```java
void selectionSort(int[] nums, boolean ascending) {
for (int i = 0; i < nums.length - 1; i++) {
int minIndex = i;
if (ascending) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] < nums[minIndex]) {
minIndex = j;
}
}
} else {
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] > nums[minIndex]) {
minIndex = j;
}
}
}
int temp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = temp;
}
}
```
现在你可以根据需要调用这些方法,例如:
```java
int[] nums = {10, 4, 56, 32, 78, -5, 1, 40, 99, 63};
bubbleSort(nums, true); // 升序冒泡排序
bubbleSort(nums, false); // 降序冒泡排序
insertionSort(nums, true); // 升序插入排序
insertionSort(nums, false); // 降序插入排序
selectionSort(nums, true); // 升序选择排序
selectionSort(nums, false); // 降序选择排序
```
执行完毕后,数组 `nums` 就会被按照要求的方式排好序了。
阅读全文