📜  从以下列表中排序自然数 - 20、1555、63.99、52、60、-78、0、-2、-32(1)

📅  最后修改于: 2023-12-03 15:36:16.169000             🧑  作者: Mango

排序自然数

下面是一个程序,可以将自然数进行排序。注意这里所说的自然数是指大于等于零的整数。排序使用的是冒泡排序算法。待排序的数列为:

  • 20
  • 1555
  • 63.99
  • 52
  • 60
  • -78
  • 0
  • -2
  • -32
代码实现
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

arr = [20, 1555, 63.99, 52, 60, -78, 0, -2, -32]
sorted_arr = bubble_sort(arr)
print(sorted_arr)
输出结果
[-78, -32, -2, 0, 20, 52, 60, 63.99, 1555]

排序后的结果为升序排列,即从小到大排序。可以看到,排序后的结果符合预期,包含了所有待排序的元素。

思路解析

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历待排序的数列,一次比较两个元素,如果它们的顺序错误就交换它们的位置,直到整个数列排序完毕。时间复杂度为O(n^2)。

具体实现时,从数列的左端开始比较相邻两个数,如果左边的数大于右边的数,则交换它们的位置。即将大的数向右移,小的数向左移。一共需要进行n-1轮比较,每轮比较之后,就有一个数排好了位置。通过每一轮比较,将待排序列中最大或最小的数值放到合适的位置上,最终实现排序。

注意事项
  • 冒泡排序是一种简单的算法,但时间复杂度较高,对于大规模的数据排序,效率不高;
  • 对于float类型数据排序时,需要注意精度问题。例如63.99看似比60大,但实际上63.99在计算机中可能被存储为63.989999999999995,而60可能被存储为60.0,造成排序结果不合预期。一般来说可以使用round()函数在排序前将浮点数进行四舍五入转换成int类型,或者使用decimal模块来处理浮点数;