定义一个函数bubble_sort,实现对数量不确定的一组数据采用冒泡排序法进行排序,返回结果为列表对象。同时,该函数有一个可选参数ascending,默认值为True,当该参数为True时,函数进行升序排序;该参数为False时,函数进行降序排序。
下面是一个实现冒泡排序的函数bubble_sort,可以对数量不确定的一组数据进行排序,同时具有升序或降序的选项:
def bubble_sort(arr, ascending=True):
n = len(arr)
for i in range(n-1):
for j in range(n-i-1):
if ascending:
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
else:
if arr[j] < arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
这个函数接受两个参数,第一个参数arr是需要排序的数组,第二个参数ascending是一个可选参数,用来决定是进行升序排序还是降序排序,其默认值为True,即升序排序。在函数内部,使用了常规的冒泡排序算法。
使用示例:
arr = [5, 2, 8, 3, 1]
sorted_arr = bubble_sort(arr)
print(sorted_arr) # [1, 2, 3, 5, 8]
arr = [5, 2, 8, 3, 1]
sorted_arr = bubble_sort(arr, ascending=False)
print(sorted_arr) # [8, 5, 3, 2, 1]
以上是一个简单的实现,可以根据实际需求进行调整和修改。
def bubble_sort(arr, ascending=True):
n = len(arr)
for i in range(n-1):
for j in range(n-i-1):
if ascending ^ (arr[j] < arr[j+1]):
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
如果求异或那一行理解起来太困难,也可以用三元表达式
if (arr[j] > arr[j+1]) if ascending else (arr[j] < arr[j+1]):
def bubble_sort(data, ascending=True):
"""
实现冒泡排序
:param data: 待排序的列表
:param ascending: 是否升序排序,默认为True
:return: 排序后的列表对象
"""
n = len(data)
for i in range(n):
for j in range(n - i - 1):
if ascending:
if data[j] > data[j + 1]:
data[j], data[j + 1] = data[j + 1], data[j]
else:
if data[j] < data[j + 1]:
data[j], data[j + 1] = data[j + 1], data[j]
return data
该函数接受一个列表对象作为参数,然后根据可选参数ascending的值来确定是进行升序排序还是降序排序,最后返回排序后的列表对象。
同样采用上述代码,对其写入函数:
//继续以此程序来进行解释:
#include<stdio.h>
void bubble_sort(int arr[],int sz)//参数类型解释②
{
for (int i = 0; i < sz-1; i++)
{
for (int j = 0; j <sz-1-i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int arr[] = { 9,8,7,4,5,6,1,2,3,0 };
int sz = sizeof(arr) / sizeof(arr[0]);//变量sz位置及计算注意事项①
bubble_sort(arr,sz);//参数类型解释②
for (int i = 0; i < 10; i++)//输出交换后的数组
{
printf("%d ", arr[i]);
}
return 0;
}
def bubble_sort(nums, ascending=True):
"""对数组进行升序或降序排序"""
n = len(nums)
for i in range(n):
for j in range(0, n-i-1):
if ascending:
if nums[j] > nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
else:
if nums[j] < nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
return nums