📜  何时使用每种排序算法(1)

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

何时使用每种排序算法

排序是计算机科学中最基本的算法之一,它将一组元素按照一定的顺序排列。排序算法在计算机领域有着广泛的应用,从数据库中的数据排序到桌面应用中的选项排序,都需要使用排序算法。常见的排序算法包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。

冒泡排序

冒泡排序是最简单的排序算法之一,也是最容易理解的排序算法之一。该算法通过比较相邻元素的值,依次将大(小)的元素交换到数组的右端(左端)。冒泡排序通常用于小的数据集或用于教育目的。

何时使用冒泡排序

尽管冒泡排序的运行时间很长,但它非常容易实现。因此,如果您需要排序的数据集非常小或者您只是为了教育目的而使用排序算法,则可以使用冒泡排序。

def bubble_sort(arr):
    n = len(arr)
    # 遍历所有数组元素
    for i in range(n):
        # Last i elements are already sorted
        for j in range(0, n-i-1):
            # traverse the array from 0 to n-i-1
            # Swap if the element found is greater than the next element
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]
    
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("Sorted array is:")
for i in range(len(arr)):
    print("%d" %arr[i]),

输出结果为:

Sorted array is:
11
12
22
25
34
64
90
选择排序

选择排序算法是一种简单但低效的排序算法。它的工作原理是在未排序的数组中查找最小或最大值,并将其放在列表的起始位置,然后重复此过程,直到列表完全排序。虽然选择排序的时间复杂度很高,但它需要很少的空间,并且对于小型数据集非常有用。

何时使用选择排序

选择排序在对于数据集较小的情况下效果很好。如果您有一个非常大的数据集,那么选择排序的时间复杂度将会很高,因此您应该选择更高效的算法。

def selection_sort(arr):
    n = len(arr) 
    # Traverse through all array elements  
    for i in range(n): 
    
        # Find the minimum element in remaining unsorted array
        min_idx = i 
        for j in range(i+1, n): 
            if arr[min_idx] > arr[j]: 
                min_idx = j 
                
        # Swap the found minimum element with  
        # the first element        
        arr[i], arr[min_idx] = arr[min_idx], arr[i]     
    
arr = [64, 34, 25, 12, 22, 11, 90]
selection_sort(arr)
print("Sorted array is:")
for i in range(len(arr)):
    print("%d" %arr[i]),

输出结果为:

Sorted array is:
11
12
22
25
34
64
90
插入排序

插入排序是一种简单的排序算法。它的工作原理是将那些已经排序好的数组与那些未排序的数组合并在一起,从而创建一个新的排序数组。插入排序的时间复杂度较低,但是它可能并不是最优秀的算法,因为它的时间复杂度是 O(n^2)。

何时使用插入排序

插入排序通常用于排序小型数据集或者是在您需要对数据集进行动态排序时。

def insertion_sort(arr):
    n = len(arr)
    # Traverse through 1 to len(arr)
    for i in range(1, n):
        key = arr[i]
  
        # Move elements of arr[0..i-1], that are
        # greater than key, to one position ahead
        # of their current position
        j = i-1
        while j >=0 and key < arr[j] :
                arr[j+1] = arr[j]
                j -= 1
        arr[j+1] = key
    
arr = [64, 34, 25, 12, 22, 11, 90]
insertion_sort(arr)
print("Sorted array is:")
for i in range(len(arr)):
    print("%d" %arr[i]),

输出结果为:

Sorted array is:
11
12
22
25
34
64
90
归并排序

归并排序算法是一种分治策略的排序算法,它的主要思想是将两个已经排序的数组合并在一起,从而创建一个新的排序数组。归并排序算法的时间复杂度为 O(n log n)。

何时使用归并排序

归并排序适用于大数据集,并且不需要给定内存缓冲区。

def merge_sort(arr):
    if len(arr) > 1:
 
        mid = len(arr)//2 # Finding the mid of the array
        L = arr[:mid] # Dividing the array elements
        R = arr[mid:] # into 2 halves
 
        merge_sort(L) # Sorting the first half
        merge_sort(R) # Sorting the second half
 
        i = j = k = 0
 
        # Copy data to temp arrays L[] and R[]
        while i < len(L) and j < len(R):
            if L[i] < R[j]:
                arr[k] = L[i]
                i += 1
            else:
                arr[k] = R[j]
                j += 1
            k += 1
 
        # Checking if any element was left
        while i < len(L):
            arr[k] = L[i]
            i += 1
            k += 1
 
        while j < len(R):
            arr[k] = R[j]
            j += 1
            k += 1
                
arr = [64, 34, 25, 12, 22, 11, 90]
merge_sort(arr)
print("Sorted array is:")
for i in range(len(arr)):
    print("%d" %arr[i]),

输出结果为:

Sorted array is:
11
12
22
25
34
64
90
快速排序

快速排序算法是一种分而治之的排序算法,它将一个数组分成两个独立的子问题,并对这些子问题递归地应用排序算法以进行排序。快速排序算法主要思想是使用一个基准值,将数组分成两个独立的子数组,左边的子数组包含所有小于基准值的元素,右边的子数组包含所有大于基准值的元素。

何时使用快速排序

快速排序是用于大型数据集的最优算法之一。如果你需要排序很大的数据集,那么快速排序将是最快的算法。

def quick_sort(arr, low, high):
     
    if low < high:
 
        # pi is partitioning index, arr[p] is now
        # at right place
        pi = partition(arr, low, high)
 
        # Separately sort elements before
        # partition and after partition
        quick_sort(arr, low, pi-1)
        quick_sort(arr, pi+1, high)
 
def partition(arr, low, high):
    i = (low-1)         # index of smaller element
    pivot = arr[high]     # pivot
 
    for j in range(low, high):
 
        # If current element is smaller than or
        # equal to pivot
        if arr[j] <= pivot:
 
            # increment index of smaller element
            i = i+1
            arr[i], arr[j] = arr[j], arr[i]
 
    arr[i+1], arr[high] = arr[high], arr[i+1]
    return (i+1)
    
arr = [64, 34, 25, 12, 22, 11, 90]
n = len(arr)
quick_sort(arr, 0, n-1)
print("Sorted array is:")
for i in range(n):
    print("%d" %arr[i]),

输出结果为:

Sorted array is:
11
12
22
25
34
64
90