C语言中的5种简单排序算法(适合小白)
介绍
排序算法是计算机科学中最基本的算法之一,其主要目的是将一组无序的数据按照一定的规则进行排列。在计算机程序设计中,排序算法是非常常用的操作之一。
本文将会介绍C语言中5种简单的排序算法,这些算法非常适合新手上手学习。
以下是5种简单排序算法的详细介绍和实例代码。
冒泡排序(Bubble Sort)
冒泡排序也是一种比较简单的排序算法,它的核心思想是:每次比较相邻两个元素,将较大的元素向后交换,直到将整个数组排列成升序。其中,n个元素要比较n-1轮,对于每一轮,都会比较n-1次。
此算法的时间复杂度为O(n^2),在数据量比较大的情况下,其效率较低。
下面给出C语言中的冒泡排序代码:
void bubbleSort(int arr[], int len){
int i, j, temp;
for(i = 0 ; i < len - 1; i++){
for(j = 0 ; j < len - 1 - i ; j++){
if(arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
下面是一个简单的示例:
int main(){
int arr[] = {4, 2, 1, 5, 6, 3};
int len = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, len);
printf("排序后的数组为: ");
for(int i = 0 ; i < len ; i++){
printf("%d ", arr[i]);
}
return 0;
}
选择排序(Selection Sort)
选择排序也是一种简单常见的排序算法,它的核心思想是:通过n-i次关键字的比较,从n-i+1个记录中选取第i小的记录,并和第i个记录进行交换位置。
此算法的时间复杂度为O(n^2),在数据量较小的情况下,其效率较高。
下面给出C语言中的选择排序算法代码:
void selectSort(int arr[], int len){
int i, j, minIndex, temp;
for(i = 0 ; i < len - 1 ; i++){
minIndex = i;
for(j = i+1 ; j < len ; j++){
if(arr[j] < arr[minIndex]){
minIndex = j;
}
}
if(minIndex != i){
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
下面是一个简单的示例:
int main(){
int arr[] = {4, 2, 1, 5, 6, 3};
int len = sizeof(arr) / sizeof(arr[0]);
selectSort(arr, len);
printf("排序后的数组为: ");
for(int i = 0 ; i < len ; i++){
printf("%d ", arr[i]);
}
return 0;
}
插入排序(Insertion Sort)
插入排序也是一种常见的排序算法,其核心思想是:将一个记录插入到已经排好序的有序序列中,从而得到一个新的有序序列。
此算法的时间复杂度为O(n^2),在数据量较小的情况下,其效率较高。
下面给出C语言中的插入排序算法代码:
void insertSort(int arr[], int len){
int i, j, temp;
for(i = 1 ; i < len ; i++){
temp = arr[i];
j = i - 1;
while(j >= 0 && arr[j] > temp){
arr[j+1] = arr[j];
j--;
}
arr[j+1] = temp;
}
}
下面是一个简单的示例:
int main(){
int arr[] = {4, 2, 1, 5, 6, 3};
int len = sizeof(arr) / sizeof(arr[0]);
insertSort(arr, len);
printf("排序后的数组为: ");
for(int i = 0 ; i < len ; i++){
printf("%d ", arr[i]);
}
return 0;
}
快速排序(Quick Sort)
快速排序是一种常用的排序算法,其核心思想是:通过一趟排序将待排记录分隔成两个独立的部分,其中一部分记录均比另一部分的记录小,则可分别对这两部分记录继续进行排序操作。
此算法的时间复杂度为O(nlogn),在数据量较大的情况下,其效率较高。
下面给出C语言中的快速排序算法代码:
void quickSort(int arr[], int low, int high){
if(low < high){
int mid = partition(arr, low, high);
quickSort(arr, low, mid-1);
quickSort(arr, mid+1, high);
}
}
int partition(int arr[], int low, int high){
int pivot = arr[low];
while(low < high){
while(low < high && arr[high] >= pivot){
high--;
}
arr[low] = arr[high];
while(low < high && arr[low] <= pivot){
low++;
}
arr[high] = arr[low];
}
arr[low] = pivot;
return low;
}
下面是一个简单的示例:
int main(){
int arr[] = {4, 2, 1, 5, 6, 3};
int len = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, len-1);
printf("排序后的数组为: ");
for(int i = 0 ; i < len ; i++){
printf("%d ", arr[i]);
}
return 0;
}
归并排序(Merge Sort)
归并排序是一种递归地将小的排序后的子序列合并成较大的已排序的序列。
此算法的时间复杂度为O(nlogn),在数据量较大的情况下,其效率较高。
下面给出C语言中的归并排序算法代码:
void mergeSort(int arr[], int left, int right){
if(left < right){
int mid = (left+right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid+1, right);
merge(arr, left, mid, right);
}
}
void merge(int arr[], int left, int mid, int right){
int i, j, k;
int n1 = mid - left + 1;
int n2 = right - mid;
int L[n1], R[n2];
for(i = 0 ; i < n1 ; i++){
L[i] = arr[left+i];
}
for(j = 0 ; j < n2 ; j++){
R[j] = arr[mid+j+1];
}
i = j = 0;
k = left;
while(i < n1 && j < n2){
if(L[i] <= R[j]){
arr[k++] = L[i++];
}
else{
arr[k++] = R[j++];
}
}
while(i < n1){
arr[k++] = L[i++];
}
while(j < n2){
arr[k++] = R[j++];
}
}
下面是一个简单的示例:
int main(){
int arr[] = {4, 2, 1, 5, 6, 3};
int len = sizeof(arr) / sizeof(arr[0]);
mergeSort(arr, 0, len-1);
printf("排序后的数组为: ");
for(int i = 0 ; i < len ; i++){
printf("%d ", arr[i]);
}
return 0;
}
结语
以上就是C语言中5种简单的排序算法,虽然算法不复杂,但掌握这些算法是非常有必要的,这也是程序员中最基础的能力之一。
由此,希望本文能帮助到想要学习C语言排序算法的初学者,如果有什么问题或建议,欢迎在评论区留言。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言中的5种简单排序算法(适合小白) - Python技术站