如何用行八大排序c语言代码

如何用行八大排序c语言代码

用C语言实现八大排序算法的方法有:冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序、希尔排序、计数排序。本文将详细描述每种排序算法的原理,并提供相应的C语言代码实现。

一、冒泡排序

冒泡排序是一种简单的交换排序算法,通过依次比较相邻元素并交换它们的位置,使得每一轮排序后,最大的元素“冒泡”到最后的位置。

void bubbleSort(int arr[], int n) {

int i, j;

for (i = 0; i < n-1; i++)

for (j = 0; j < n-i-1; j++)

if (arr[j] > arr[j+1])

swap(&arr[j], &arr[j+1]);

}

void swap(int *xp, int *yp) {

int temp = *xp;

*xp = *yp;

*yp = temp;

}

二、选择排序

选择排序通过反复从未排序部分选择最小(或最大)元素,将其放到已排序部分的末尾。

void selectionSort(int arr[], int n) {

int i, j, min_idx;

for (i = 0; i < n-1; i++) {

min_idx = i;

for (j = i+1; j < n; j++)

if (arr[j] < arr[min_idx])

min_idx = j;

swap(&arr[min_idx], &arr[i]);

}

}

三、插入排序

插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

void insertionSort(int arr[], int n) {

int i, key, j;

for (i = 1; i < n; i++) {

key = arr[i];

j = i - 1;

while (j >= 0 && arr[j] > key) {

arr[j + 1] = arr[j];

j = j - 1;

}

arr[j + 1] = key;

}

}

四、快速排序

快速排序通过选择一个“基准”元素,将数组分成两部分,小于基准的放左边,大于基准的放右边,然后递归排序两部分。

void quickSort(int arr[], int low, int high) {

if (low < high) {

int pi = partition(arr, low, high);

quickSort(arr, low, pi - 1);

quickSort(arr, pi + 1, high);

}

}

int partition(int arr[], int low, int high) {

int pivot = arr[high];

int i = (low - 1);

for (int j = low; j <= high - 1; j++) {

if (arr[j] < pivot) {

i++;

swap(&arr[i], &arr[j]);

}

}

swap(&arr[i + 1], &arr[high]);

return (i + 1);

}

五、归并排序

归并排序采用分治法,将数组分成两半分别排序,然后将已排序的两半合并。

void mergeSort(int arr[], int l, int r) {

if (l < r) {

int m = l + (r - l) / 2;

mergeSort(arr, l, m);

mergeSort(arr, m + 1, r);

merge(arr, l, m, r);

}

}

void merge(int arr[], int l, int m, int r) {

int i, j, k;

int n1 = m - l + 1;

int n2 = r - m;

int L[n1], R[n2];

for (i = 0; i < n1; i++)

L[i] = arr[l + i];

for (j = 0; j < n2; j++)

R[j] = arr[m + 1 + j];

i = 0;

j = 0;

k = l;

while (i < n1 && j < n2) {

if (L[i] <= R[j]) {

arr[k] = L[i];

i++;

} else {

arr[k] = R[j];

j++;

}

k++;

}

while (i < n1) {

arr[k] = L[i];

i++;

k++;

}

while (j < n2) {

arr[k] = R[j];

j++;

k++;

}

}

六、堆排序

堆排序通过将数组视为二叉树,先构建最大堆,然后依次将堆顶元素移到数组末尾,调整堆。

void heapSort(int arr[], int n) {

for (int i = n / 2 - 1; i >= 0; i--)

heapify(arr, n, i);

for (int i = n - 1; i > 0; i--) {

swap(&arr[0], &arr[i]);

heapify(arr, i, 0);

}

}

void heapify(int arr[], int n, int i) {

int largest = i;

int l = 2 * i + 1;

int r = 2 * i + 2;

if (l < n && arr[l] > arr[largest])

largest = l;

if (r < n && arr[r] > arr[largest])

largest = r;

if (largest != i) {

swap(&arr[i], &arr[largest]);

heapify(arr, n, largest);

}

}

七、希尔排序

希尔排序是插入排序的增强版,通过将数组元素按一定间隔分组,逐步减小间隔进行插入排序。

void shellSort(int arr[], int n) {

for (int gap = n / 2; gap > 0; gap /= 2) {

for (int i = gap; i < n; i += 1) {

int temp = arr[i];

int j;

for (j = i; j >= gap && arr[j - gap] > temp; j -= gap)

arr[j] = arr[j - gap];

arr[j] = temp;

}

}

}

八、计数排序

计数排序适用于元素范围有限的数组,通过统计元素出现次数,重新排列数组。

void countSort(int arr[], int n) {

int max = arr[0];

for (int i = 1; i < n; i++) {

if (arr[i] > max)

max = arr[i];

}

int count[max + 1];

for (int i = 0; i <= max; i++)

count[i] = 0;

for (int i = 0; i < n; i++)

count[arr[i]]++;

for (int i = 1; i <= max; i++)

count[i] += count[i - 1];

int output[n];

for (int i = n - 1; i >= 0; i--) {

output[count[arr[i]] - 1] = arr[i];

count[arr[i]]--;

}

for (int i = 0; i < n; i++)

arr[i] = output[i];

}

以上八种排序算法各有优缺点,适用于不同场景。冒泡排序和选择排序简单易懂但效率较低,适合小规模数据;插入排序在数据接近有序时表现良好;快速排序和归并排序效率高,但对空间有额外要求;堆排序适合需要稳定性能的场景;希尔排序通过分组提高效率;计数排序适合范围有限的整数排序。

相关项目管理系统推荐

在使用排序算法进行数据处理时,若涉及到项目管理,推荐使用研发项目管理系统PingCode通用项目管理软件Worktile,它们能够有效帮助团队管理和协作,提高工作效率。

相关问答FAQs:

1. 什么是行八大排序算法?
行八大排序算法是指常见的八种排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序和计数排序。这些算法可以用于对一组数据进行排序操作。

2. 如何使用C语言编写冒泡排序算法?
冒泡排序是一种简单的排序算法,它通过多次比较和交换相邻的元素来实现排序。你可以使用以下C语言代码实现冒泡排序:

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

3. 如何使用C语言编写快速排序算法?
快速排序是一种高效的排序算法,它通过选择一个基准元素,将数组分成两部分,然后对这两部分进行递归排序来实现排序。你可以使用以下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++;
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[i+1];
    arr[i+1] = arr[high];
    arr[high] = temp;
    return i+1;
}

希望以上信息对你有帮助!如果你有其他问题,请随时提问。

文章包含AI辅助创作,作者:Edit1,如若转载,请注明出处:https://docs.pingcode.com/baike/1100038

(0)
Edit1Edit1
免费注册
电话联系

4008001024

微信咨询
微信咨询
返回顶部