1、常见的几种排序方法
-
冒泡排序(稳定排序、时间复杂度:O(n2) )
冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字
的位置”这一操作的算法。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的
顶端,所以这个算法才被称为“冒泡排序”。
Python实现:def bubble_sort(arr): n = len(arr) for i in range(n-1): for j in range(n-i-1): if arr[j] > arr[j+1]: arr[j],arr[j+1] = arr[j+1],arr[j] if __name__ == "__main__": arr = [15,8,32,42,25,41] bubble_sort(arr) print("排序之后:",arr)
C++实现:
#include "iostream" using namespace std; int *bubble(int *arr, int n){ for (int i=0; i<n-1; i++){ for (int 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; } } } return arr; } int main(){ int arr[10] = {15,22,8,29,33,55,68,42,2,10}; int *p = bubble(arr, 10); for (int i=0; i<10; i++){ cout << p[i] << " "; } return 0; }
-
选择排序(不稳定排序、时间复杂度:O(n2) )
选择排序就是重复“从待排序的数据中寻找最小值,将其与序列最左边的数字进行交换”
这一操作的算法。在序列中寻找最小值时使用的是线性查找。def select_sort(arr): n = len(arr) for i in range(n-1): min_index = i for j in range(i+1,n): if arr[min_index] > arr[j]: min_index = j if i != min_index: arr[min_index],arr[i] = arr[i],arr[min_index] if __name__ == "__main__": arr = [15,8,32,42,25,41] select_sort(arr) print("排序之后:",arr)
-
插入排序(稳定排序,时间复杂度:O(n2) )
插入排序是一种从序列左端开始依次对数据进行排序的算法。在排序过程中,左侧的数据
陆续归位,而右侧留下的就是还未被排序的数据。插入排序的思路就是从右侧的未排序区域内
取出一个数据,然后将它插入到已排序区域内合适的位置上。def insert_sort(arr): n = len(arr) for i in range(1,n): key = arr[i] j = i - 1 while j>=0 and arr[j] > key: arr[j+1] = arr[j] j -= 1 arr[j+1] = key if __name__ == "__main__": arr = [15,8,32,42,25,41] insert_sort(arr) print("排序之后:",arr)