用C语言编写代码分别实现直接插入排序算法、希尔排序算法、冒泡排序算法、快速排序算法、简单排序算法、堆排序算法、归并排序算法
时间: 2023-07-27 10:18:38 浏览: 54
好的,我会为您分别列出这些排序算法的C语言代码实现。
1. 直接插入排序算法:
```c
void insertSort(int arr[], int n) {
int i, j, temp;
for (i = 1; i < n; ++i) {
temp = arr[i];
for (j = i - 1; j >= 0 && arr[j] > temp; --j) {
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
}
```
2. 希尔排序算法:
```c
void shellSort(int arr[], int n) {
int gap, i, j, temp;
for (gap = n / 2; gap > 0; gap /= 2) {
for (i = gap; i < n; ++i) {
temp = arr[i];
for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap) {
arr[j + gap] = arr[j];
}
arr[j + gap] = temp;
}
}
}
```
3. 冒泡排序算法:
```c
void bubbleSort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n - 1; ++i) {
for (j = 0; j < n - i - 1; ++j) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
```
4. 快速排序算法:
```c
void quickSort(int arr[], int left, int right) {
int i, j, pivot, temp;
if (left < right) {
i = left;
j = right;
pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) --j;
if (i < j) arr[i++] = arr[j];
while (i < j && arr[i] < pivot) ++i;
if (i < j) arr[j--] = arr[i];
}
arr[i] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
}
```
5. 简单排序算法:
```c
void selectionSort(int arr[], int n) {
int i, j, minIndex, temp;
for (i = 0; i < n - 1; ++i) {
minIndex = i;
for (j = i + 1; j < n; ++j) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
```
6. 堆排序算法:
```c
void heapSort(int arr[], int n) {
int i, temp;
for (i = n / 2 - 1; i >= 0; --i) {
heapify(arr, n, i);
}
for (i = n - 1; i >= 0; --i) {
temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
heapify(arr, i, 0);
}
}
void heapify(int arr[], int n, int i) {
int largest = i, left = 2 * i + 1, right = 2 * i + 2, temp;
if (left < n && arr[left] > arr[largest]) largest = left;
if (right < n && arr[right] > arr[largest]) largest = right;
if (largest != i) {
temp = arr[i];
arr[i] = arr[largest];
arr[largest] = temp;
heapify(arr, n, largest);
}
}
```
7. 归并排序算法:
```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, n1 = mid - left + 1, n2 = right - mid, 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 + 1 + j];
i = 0, 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++];
}
}
```
以上就是这七种排序算法的C语言代码实现,希望能够对您有所帮助。