c语言快速排序算法总结(详解)

快速排序是一种分治算法,其基本原理如下:

  1. 选择一个基准元素(pivot),通常选择序列中的第一个元素。
  2. 将序列分为两部分,使得左边部分的元素都小于等于基准元素,右边部分的元素都大于基准元素。这个过程称为分区(partition)操作。
  3. 对左右两部分分别递归地应用快速排序算法。
  4. 当左右两部分都排序完毕后,整个序列就变得有序。

具体实现时,快速排序的分区操作可以采用多种方法,常见的是使用双指针或者挖坑填数的方式进行分区。在实际应用中,为了提高排序的稳定性,通常会对小规模子序列采用其他排序算法,例如插入排序。快速排序的时间复杂度通常为O(nlogn),在最坏情况下为O(n^2)。快速排序是一种不稳定的排序算法,因为在分区操作中可能会改变相同元素的相对顺序。快速排序在实际应用中广泛使用,因为它在平均情况下具有较好的性能,并且可以采用原地排序的方式,节省了额外的空间开销。
c语言快速排序算法总结(详解)_第1张图片递归结束的条件是I < J

快速排序代码截图

c语言快速排序算法总结(详解)_第2张图片快速排序代码实现

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define MAX 10
using namespace std;

// 打印函数
void PrintArray(int arr[], int length) {
    for (int i = 0; i < length; i++) {
        cout << arr[i] << " ";

    }
    cout << endl;

}
// 快速排序的实现,从小到大
void QuickSort(int arr[],int start, int end) {
    // 
    int i = start;
    int j = end;
    // 基准数所有的数都和他进行比较
    int temp = arr[start];

    if (i < j) {
    
        while (i < j) {
            while (i < j && arr[j] >= temp) {
                //从右向左找符合条件的
                j--;
    
            }
            // 填充数据
            if (i < j) {
                arr[i] = arr[j];
                i++;
            }
            // 从左向右找比基准数更大的数
            while (i < j && arr[i] < temp) {
                i++;
            }
            // 填坑
            if (i < j) {
                arr[j] = arr[i];
                j--;
            }
        }
        // 把基准数放到i的位置或者是j的位置
        arr[i] = temp;
        // 对基准数的左半部分进行快速排序
        QuickSort(arr, start, i - 1);
        // 对基准数的右半部分进行快速排序
        QuickSort(arr, i + 1, end);
    }

}

int main(void)
{
    int myArr[] = { 4,2,8,0,5,7,1,3,9 };
    int len = sizeof(myArr) / sizeof(myArr[0]);
    PrintArray(myArr, len);
    QuickSort(myArr,0,len - 1);
    PrintArray(myArr, len);


    return 0;

}

快速排序运行结果展示

c语言快速排序算法总结(详解)_第3张图片

你可能感兴趣的:(排序算法,c语言,算法,快速排序,数据结构,visual,code)