用swift写一个冒泡排序
时间: 2023-09-08 20:04:16 浏览: 74
### 回答1:
下面是一个使用 Swift 编写的冒泡排序算法示例:
```swift
func bubbleSort(_ array: inout [Int]) {
guard array.count > 1 else {
return
}
for i in 0..<array.count {
var swapped = false
for j in 1..<array.count - i {
if array[j] < array[j - 1] {
array.swapAt(j, j - 1)
swapped = true
}
}
if !swapped {
return
}
}
}
```
这个函数接受一个 Int 数组作为参数,并将其原地排序。它使用两个嵌套的循环来比较和交换相邻的元素,直到数组完全排序为止。在第一次遍历期间,最大的元素会被移动到数组的末尾。在第二次遍历期间,除了最大的元素之外的最大元素会被移动到数组的末尾,以此类推。当没有元素需要交换时,算法将退出,因为数组已经排序完成。
以下是示例用法:
```swift
var array = [3, 2, 1, 4, 5]
bubbleSort(&array)
print(array) // [1, 2, 3, 4, 5]
```
### 回答2:
冒泡排序是一种简单的排序算法,它通过多次遍历待排序数组,每次比较相邻的两个元素,若顺序不对则交换位置,直到整个数组有序为止。
下面是使用Swift语言实现冒泡排序的示例代码:
```swift
func bubbleSort(_ array: inout [Int]) {
let n = array.count
guard n > 1 else {
return
}
for i in 0..<n-1 {
var isSwapped = false
for j in 0..<n-i-1 {
if array[j] > array[j+1] {
array.swapAt(j, j+1)
isSwapped = true
}
}
// 如果某次遍历没有发生交换,说明数组已经有序,可以提前退出循环
if !isSwapped {
break
}
}
}
var numbers = [5, 3, 8, 4, 2]
bubbleSort(&numbers)
print(numbers) // 输出结果: [2, 3, 4, 5, 8]
```
在上述代码中,我们定义了一个名为`bubbleSort`的函数,参数为一个`inout`修饰的整型数组。函数使用了嵌套的循环来进行冒泡排序,外层循环控制遍历的轮数,内层循环用于比较相邻元素并交换位置。变量`isSwapped`用于标记某次遍历是否发生了交换,用于优化算法的性能。最后,通过调用`bubbleSort`函数并传入一个需要排序的数组,我们可以得到一个有序的数组。
这是一个简单的用Swift实现冒泡排序的例子,希望能对你有所帮助。
### 回答3:
冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻的两个元素,并按照从小到大的顺序交换它们,直到整个列表排序完成。以下是使用Swift语言编写的冒泡排序算法:
```swift
func bubbleSort(_ array: [Int]) -> [Int] {
var sortedArray = array
let n = sortedArray.count
var isSwapped: Bool
for i in 0..<n-1 {
isSwapped = false
for j in 0..<n-i-1 {
if sortedArray[j] > sortedArray[j+1] {
sortedArray.swapAt(j, j+1)
isSwapped = true
}
}
if !isSwapped {
break
}
}
return sortedArray
}
let unsortedArray = [5, 2, 9, 1, 7]
let sortedArray = bubbleSort(unsortedArray)
print(sortedArray) // 输出 [1, 2, 5, 7, 9]
```
在这个实现中,我们定义了一个bubbleSort函数,接受一个整数数组作为参数,并返回排序后的数组。我们首先将要排序的数组复制到一个临时数组sortedArray中,然后使用两个嵌套的for循环进行比较和交换操作。第一个for循环定义了外部迭代变量i,表示迭代次数,第二个for循环定义了内部迭代变量j,表示每一轮比较的次数。在每一轮的内部循环中,我们比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置,直到内部循环结束。如果在一轮内部循环中没有进行任何交换操作,说明数组已经完全排序好了,因此我们使用isSwapped变量来进行判断,如果没有进行交换操作,则说明排序已经完成,可以提前终止外部循环。
最后,我们用一个示例进行测试。我们定义了一个未排序的整数数组unsortedArray,并将其传递给bubbleSort函数进行排序。排序后的结果存储在sortedArray中,最后打印该数组。输出结果应该为[1, 2, 5, 7, 9]。