21xrx.com
2024-11-09 01:45:19 Saturday
登录
文章检索 我的文章 写文章
C语言实现快速排序算法
2023-09-29 22:51:24 深夜i     --     --
快速排序算法 C语言实现

快速排序是一种常用的排序算法,它可以在平均情况下以O(nlogn)的时间复杂度对数组进行排序。C语言是一种广泛使用的编程语言,也是快速排序算法常用的实现语言之一。本文将介绍如何在C语言中实现快速排序算法。

首先,让我们了解一下快速排序的基本原理。快速排序的核心思想是通过选取一个基准元素,将数组分为左右两个部分。左侧部分的元素都小于等于基准元素,右侧部分的元素都大于等于基准元素。接下来,递归地对左右两个部分进行快速排序,直到数组有序。

在C语言中,我们可以通过以下步骤实现快速排序算法:

1. 定义一个函数,命名为quickSort,用于递归地对数组进行快速排序。函数的原型可以这样定义:void quickSort(int arr[], int low, int high)。

2. 在quickSort函数中,我们需要选择一个基准元素,并将数组进行分区。选择基准元素的方法有很多种,常用的方法是选取数组的中间元素。我们可以定义一个函数partition,用于将数组分为左右两个部分,并返回基准元素的索引。

3. 在partition函数中,我们可以通过以下步骤完成分区。首先,定义两个变量i和j,分别指向数组的第一个元素和最后一个元素。然后,选择基准元素,可以将其赋值给一个临时变量pivot。接下来,使用循环将数组分区:从左侧开始,找到一个大于等于基准元素的元素,从右侧开始,找到一个小于等于基准元素的元素,然后交换这两个元素。重复这个过程,直到i和j指针相遇。最后,将基准元素放置在相遇位置,并返回相遇位置的索引。

4. 接下来,在quickSort函数中,我们需要按照基准元素的索引,递归地对左右两个部分进行快速排序。具体方式是调用quickSort函数,传入数组、low和pivot-1,以及传入数组、pivot+1和high。

5. 最后,在主函数中,我们可以创建一个数组,并调用quickSort函数对数组进行快速排序。排序完成后,我们可以遍历数组并输出排序结果。

下面是一个完整的示例代码:


#include<stdio.h>

void swap(int* a, int* b){

  int t = *a;

  *a = *b;

  *b = t;

}

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 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 main(){

  int arr[] = 7;

  int n = sizeof(arr)/sizeof(arr[0]);

  

  quickSort(arr, 0, n-1);

  

  printf("Sorted array: ");

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

    printf("%d ", arr[i]);

  }

  return 0;

}

通过以上步骤,在C语言中实现了快速排序算法。从结果上看,程序将输入数组[10, 7, 8, 9, 1, 5]排序为[1, 5, 7, 8, 9, 10]。这个示例展示了C语言中如何实现快速排序算法,对于更复杂的数组也可以使用相同的思路进行处理。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复