写出c语言排序的所有方法及代码实现举例
时间: 2023-05-26 13:06:26 浏览: 96
C语言排序方法及代码
以下是常见的几种排序方法及其对应的C语言代码实现:
1. 冒泡排序
冒泡排序的基本思想是将相邻的元素逐一比较,将较大的数向后移动。每一轮比较后,未排序的部分中最大的数会被移到最后。重复这个过程,直到所有元素都有序。
C语言代码实现:
```c
void bubble_sort(int arr[], int n) {
int i, j, tmp;
for (i = 0; i < n-1; ++i) {
for (j = 0; j < n-i-1; ++j) {
if (arr[j] > arr[j+1]) {
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
```
2. 选择排序
选择排序的基本思想是在当前未排序的部分中,选择最小的元素,将其放到已排序部分的末尾。以此类推,直到所有元素都有序。
C语言代码实现:
```c
void selection_sort(int arr[], int n) {
int i, j, min_index, tmp;
for (i = 0; i < n-1; ++i) {
min_index = i;
for (j = i+1; j < n; ++j) {
if (arr[j] < arr[min_index]) {
min_index = j;
}
}
if (min_index != i) {
tmp = arr[i];
arr[i] = arr[min_index];
arr[min_index] = tmp;
}
}
}
```
3. 插入排序
插入排序的基本思想是将未排序的元素依次插入到已排序的部分中,保证已排序的部分始终有序。
C语言代码实现:
```c
void insertion_sort(int arr[], int n) {
int i, j, tmp;
for (i = 1; i < n; ++i) {
tmp = arr[i];
for (j = i-1; j >= 0 && tmp < arr[j]; --j) {
arr[j+1] = arr[j];
}
arr[j+1] = tmp;
}
}
```
4. 快速排序
快速排序的基本思想是选择一个基准元素,将小于它的元素放在它左边,大于它的元素放在它右边。然后递归地对左右两个子序列进行快速排序。
C语言代码实现:
```c
void quick_sort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right, pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) {
--j;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) {
++i;
}
arr[j] = arr[i];
}
arr[i] = pivot;
quick_sort(arr, left, i-1);
quick_sort(arr, i+1, right);
}
```
5. 归并排序
归并排序的基本思想是将待排序的序列分成两个子序列,分别进行排序,然后将两个排序好的子序列合并。
C语言代码实现:
```c
void merge(int arr[], int left, int mid, int right) {
int i = left, j = mid+1, k = 0;
int tmp[right-left+1];
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
tmp[k++] = arr[i++];
} else {
tmp[k++] = arr[j++];
}
}
while (i <= mid) {
tmp[k++] = arr[i++];
}
while (j <= right) {
tmp[k++] = arr[j++];
}
for (i = left, k = 0; i <= right; ++i, ++k) {
arr[i] = tmp[k];
}
}
void merge_sort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int mid = (left + right) / 2;
merge_sort(arr, left, mid);
merge_sort(arr, mid+1, right);
merge(arr, left, mid, right);
}
```
阅读全文