常见的初级排序算法,这次全搞懂
排序算法的意义和分类
排序算法是计算机科学中的基本问题之一,其作用是将一组数据按照指定的顺序进行排列。排序算法广泛应用于各个领域,例如计算机图形学、数据库系统、数据压缩、网络路由等。排序算法按照不同的思想和实现方式可以分为多种分类,常见的初级排序算法主要包括冒泡排序、插入排序和选择排序。
冒泡排序
冒泡排序是一种简单且易于理解的排序算法,其思想是通过比较相邻元素的大小,逐步将最大(或最小)的元素交换到末尾。具体实现时,从第一个元素开始,依次比较相邻的两个元素,如果前者大于后者,则交换位置。经过一轮的比较,最大(或最小)的元素就被交换到了末尾。然后再从第一个元素开始,进行下一轮的比较和交换,直到所有元素都按照指定顺序排列好。
// 冒泡排序实现代码示例 void bubbleSort(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]) { // 交换相邻元素的位置 swap(arr[j], arr[j+1]); } } } }
插入排序
插入排序是将数据分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的合适位置。具体实现时,从第二个元素开始,将其与已排序部分的元素逐个比较并向后移动,直到找到合适的位置插入。通过不断地重复这个过程,直到所有元素都插入到已排序部分,即完成了排序。
// 插入排序实现代码示例 void insertionSort(int arr[], int n) { for(int i = 1; i < n; i++) { // 将arr[i]插入到已排序部分的合适位置 int key = arr[i]; int j = i - 1; while(j >= 0 && arr[j] > key) { arr[j+1] = arr[j]; j--; } arr[j+1] = key; } }
选择排序
选择排序是一种简单直观的排序算法,其思想是每次从未排序部分选择最小(或最大)的元素,与未排序部分的第一个元素交换位置。具体实现时,从第一个元素开始,依次与后面的元素比较,找到最小(或最大)的元素,然后与第一个元素交换位置。然后从第二个元素开始,再次选择未排序部分的最小(或最大)元素放到相应的位置,以此类推,直到所有元素都按照指定顺序排列好。
// 选择排序实现代码示例 void selectionSort(int arr[], int n) { for(int i = 0; i < n - 1; i++) { int minIdx = i; for(int j = i + 1; j < n; j++) { if(arr[j] < arr[minIdx]) { minIdx = j; } } if(minIdx != i) { // 交换最小元素与当前元素的位置 swap(arr[i], arr[minIdx]); } } }