public void sortByPriceUsingBubbleSort() { for (int i = 0; i < size - 1; i++) { boolean swapped = false; for (int j = 0; j < size - i - 1; j++) { if (drugs[j].getPrice() > drugs[j + 1].getPrice()) {
时间: 2024-02-14 08:33:42 浏览: 17
这段代码是使用冒泡排序算法对一个药品数组按照药品价格进行排序。冒泡排序算法的基本思想是将相邻的元素两两比较,如果前一个元素大于后一个元素,则交换这两个元素,一轮下来可以使得未排序部分的最大元素移动到最后。重复进行这个过程,直到所有元素都排好序。
在这段代码中,外层循环控制排序的轮数,内层循环用于在未排序的数据中进行相邻元素的比较。如果当前元素的价格比下一个元素的价格大,则交换这两个元素的位置。在每一轮内层循环结束后,如果没有进行任何元素交换,则说明数组已经排好序,可以提前结束循环。最终,当外层循环结束时,数组中的数据就被排好序了。
相关问题
JAVA代码实现直接选择排序算法和冒泡排序算法。
以下是JAVA代码实现直接选择排序算法和冒泡排序算法的示例:
直接选择排序算法:
```java
public static void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
```
冒泡排序算法:
```java
public static void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
boolean swapped = false;
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
if (!swapped) {
break;
}
}
}
```
以上代码实现了直接选择排序算法和冒泡排序算法,可根据需要进行调用。
我不希望连续两次for循环调用,改进下方法
当然可以,以下是一个使用 `while` 循环实现的冒泡排序Java代码示例:
```java
public class BubbleSort {
public static void main(String[] args) {
int[] arr = { 5, 2, 1, 8, 4 };
System.out.println("排序前的数组:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
bubbleSort(arr);
System.out.println("\n排序后的数组:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
public static void bubbleSort(int[] arr) {
int temp;
boolean swapped = true;
int i = 0;
while (swapped) {
swapped = false;
for (int j = 1; j < arr.length - i; j++) {
if (arr[j - 1] > arr[j]) {
temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
swapped = true;
}
}
i++;
}
}
}
```
该代码与前面的代码相比,主要是使用了 `while` 循环来避免连续两次 `for` 循环的调用。在 `while` 循环中,使用一个 `swapped` 标志来判断数组是否已经排序完成,同时使用变量 `i` 来记录已经排好序的元素个数,从而避免重复比较已经排好序的元素。