常用的C语言排序算法(两种)
排序算法是计算机程序员经常用到的算法,在实际的开发中排序算法往往可以提升程序的效率。在C语言中常用的排序算法有很多种,其中比较常见的包括快速排序和冒泡排序两种。
快速排序
快速排序(Quick Sort)是一种分而治之的思想,它通过在数据集合中挑选一个基准数,将数据集合分成两部分,一部分大于基准数,一部分小于基准数,然后对这两部分数列再分别重复这个过程,直到各部分数据有序,最终得到排序结果。快速排序的时间复杂度为O(nlogn)。
以下是C语言实现快速排序的示例代码:
void QuickSort(int arr[], int left, int right)
{
if (left >= right)
return;
int base = arr[left];
int i = left, j = right;
while (i != j) {
while (arr[j] >= base && i < j)
j--;
while (arr[i] <= base && i < j)
i++;
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
arr[left] = arr[i];
arr[i] = base;
QuickSort(arr, left, i - 1);
QuickSort(arr, i + 1, right);
}
上面的代码中,QuickSort()函数是快速排序的主体函数。这个函数的参数arr是一个整型数组,存储需要排序的数据,left和right是排序数据的左右边界,通过这两个参数确定需要排序的数据范围。在函数内部,我们首先判断left和right的大小关系,如果left>=right,表示数据集合为空或者只有一个元素,直接返回即可。我们接下来通过base变量来记录基准数。接着我们从左右两端开始扫描整个数列,当左侧扫描到一个大于base的数时,右侧开始扫描,寻找一个小于base的数,将这两个数进行交换。最终,左右两端的扫描会相遇,此时的位置即为基准数的最终位置,将其与arr[left]交换即可。此时数组就被分成了两部分,左侧部分的元素都小于等于基准数,右侧部分的元素都大于等于基准数。接着递归对左右两部分进行调用QuickSort()函数即可。
冒泡排序
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地走访过要排序的数据列,依次比较相邻的两个元素,如果顺序错误就交换它们的位置,直到整个数据排序完成为止。冒泡排序的时间复杂度为O(n^2)。
以下是C语言实现冒泡排序的示例代码:
void BubbleSort(int arr[], int len)
{
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
上面的代码中,BubbleSort()函数是冒泡排序的主体函数。这个函数的参数arr是一个整型数组,存储需要排序的数据,len是需要排序的数据长度。函数内部通过两层for循环来实现冒泡排序的操作。外层的循环控制次数,内层的循环控制比较。每次内层循环都将相邻的两个数进行比较,如果顺序错误就交换它们的位置,最终经过循环遍历几次之后,数组就被排成了从小到大的顺序。
总结
快速排序和冒泡排序都是较为常用的C语言排序算法。快速排序通过分而治之的思想对数列进行递归处理,最终得到排序结果,时间复杂度为O(nlogn);冒泡排序则是通过多次比较和交换实现排序,时间复杂度为O(n^2)。在实际的开发中,我们可以根据数据量的大小和应用场景的不同选择不同的排序算法,以达到最优的效果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:常用的C语言排序算法(两种) - Python技术站