10个经典的C语言基础算法及代码
1.冒泡排序算法
冒泡排序是一种简单但效率较低的排序算法,在每一轮遍历中比较相邻的两个元素,如果顺序不正确则交换它们,直到整个数组有序为止。
```c
void bubbleSort(int arr[], int n)
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-1-i; j++)
if (arr[j] > arr[j+1])
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
```
2.选择排序算法
选择排序是一种简单直观的排序算法,它每次从待排序的数组中选择最小(或最大)的元素,并放到已排序的数组末尾。
```c
void selectionSort(int arr[], int n)
for (int i = 0; i < n-1; i++)
int min_index = i;
for (int j = i+1; j < n; j++)
if (arr[j] < arr[min_index])
c语言用递归函数求n的阶乘min_index = j;
}
}
int temp = arr[i];
arr[i] = arr[min_index];
arr[min_index] = temp;
}
```
3.插入排序算法
插入排序的基本思想是将数组分为已排序和未排序两部分,每次将未排序的元素插入到已排序的合适位置。
```c
void insertionSort(int arr[], int n)
for (int i = 1; i < n; 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;
}
```
4.快速排序算法
快速排序使用分治法的思想,每次选择一个基准元素,将小于基准的元素放到左边,大于基准的元素放到右边,然后递归地对左右两个子数组进行排序。
```c
void quickSort(int arr[], int low, int high)
if (low < high)
int pivot = partition(arr, low, high);
quickSort(arr, low, pivot - 1);
quickSort(arr, pivot + 1, high);
}
int partition(int arr[], int low, int high)
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++)
if (arr[j] < pivot)
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i+1], &arr[high]);
return i+1;
void swap(int *a, int *b)
int temp = *a;
*a=*b;
*b = temp;
```
5.归并排序算法
归并排序采用分治法的思想,将数组分成两个子数组,分别进行排序,然后合并这两个子数组以得到完整的有序数组。
```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 n1 = mid - left + 1;
int n2 = right - mid;
int L[n1], R[n2];
for (int i = 0; i < n1; i++)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论