优化一下冒泡排序,需要排序的数组由用户自己输入
时间: 2024-02-23 08:33:07 浏览: 19
以下是优化后的冒泡排序算法,其中使用了一个布尔变量flag来记录是否进行了交换,如果没有进行交换,则说明数组已经有序,可以提前结束排序,减少时间复杂度。
```python
arr = list(map(int, input("请输入需要排序的数组,用空格分隔:").split()))
n = len(arr)
flag = True
for i in range(n):
if not flag:
break
flag = False
for j in range(n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
flag = True
print("排序后的数组为:", arr)
```
示例输入:
```
请输入需要排序的数组,用空格分隔:5 3 8 6 4
```
示例输出:
```
排序后的数组为: [3, 4, 5, 6, 8]
```
相关问题
C语言利用冒泡排序法调用指针数组
要利用冒泡排序法对指针数组进行排序,可以按照以下步骤进行操作:
1. 定义一个指针数组,其中每个指针指向要排序的元素。
2. 使用冒泡排序算法对指针数组进行排序,而不是直接对元素进行排序。
3. 冒泡排序算法的主要思想是比较相邻的元素,如果它们的顺序不正确,则交换它们。重复此过程,直到整个数组排序完成。
4. 在交换指针时,实际上是在交换指针所指向的元素的位置。
下面是一个示例代码来演示如何使用冒泡排序法对指针数组进行排序:
```c
#include <stdio.h>
void bubbleSort(int *arr[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (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;
}
}
}
}
int main() {
int num1 = 5, num2 = 2, num3 = 8;
int *ptrArr[] = {&num1, &num2, &num3};
int i;
printf("Before sorting: ");
for (i = 0; i < 3; i++) {
printf("%d ", *ptrArr[i]);
}
bubbleSort(ptrArr, 3);
printf("\nAfter sorting: ");
for (i = 0; i < 3; i++) {
printf("%d ", *ptrArr[i]);
}
return 0;
}
```
在这个示例中,我们定义了一个指针数组 `ptrArr` ,其中包含了三个指针,分别指向 `num1`、`num2` 和 `num3` 这三个整数变量。然后,我们调用 `bubbleSort` 函数对指针数组进行排序。排序完成后,我们输出排序后的结果。
注意,在交换指针时,我们实际上是在交换指针所指向的元素的位置,而不是交换指针本身的值。
用 java 写一个可以自己输入数组的冒泡排序
好的,下面是一个可供用户输入数组并进行冒泡排序的 Java 代码示例:
```java
import java.util.Scanner;
public class BubbleSort {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入数组的长度:");
int length = scanner.nextInt();
int[] arr = new int[length];
System.out.println("请输入数组元素:");
for (int i = 0; i < length; i++) {
arr[i] = scanner.nextInt();
}
// 冒泡排序
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
// 输出排序后的结果
System.out.println("排序后的数组:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
```
上面的代码中,我们使用了 `Scanner` 对象来获取用户输入。首先,我们让用户输入数组的长度,然后创建一个对应长度的整型数组 `arr`。接下来,在一个循环中,我们让用户逐个输入数组的元素。然后,我们使用冒泡排序算法对输入的数组进行排序。最后,我们输出排序后的结果。