用c语言编写函数QuickSort()来实现快速排序

用c语言编写函数QuickSort()来实现快速排序,第1张

#include <stdlib.h>

#include <stdio.h>

#define MAXN 8

#define MOD 1024

void QuickSort(int *arr, int low, int high)

{

    if (low >= high) return

    //保存排序区间的 起始位置和终点位置

    int left = low, right = high

    //默认 左边第一个元素 为标志

    int key = arr[low]

    while (low < high)

    {

        while (low < high && arr[high] <= key) --high

        arr[low] = arr[high]

        while (low < high && arr[low] >= key) ++low

        arr[high] = arr[low]

    }

    arr[low] = key

    //每次排序后都分成两部分[left, low) (low, right]

    //arr[low]的位置是一定是有序的

    QuickSort(arr, left, low - 1)

    QuickSort(arr, low + 1, right)

    return

}

int main(void)

{

    int n

    scanf("%d", &n)

    int arr[MAXN] = {0}

    int i

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

        scanf("%d", &arr[i])

    //输入是默认为生活中习惯的数组左边第一个为:编号1

    int s, m

    scanf("%d %d", &s, &m)

    //转成计算机数组第一个为:编号0

    s-- m--

    //快排

    QuickSort(arr, s, m)

    //输出

    for (i = s i <= m ++i)

    {

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

    }

    return 0

}

//测试数据

//8

//1 2 3 4 5 6 7 8

//2 6

输出 6 5 4 3 2

#include <stdio.h>

int partions(int l[],int low,int high)

{

int prvotkey=l[low]

l[0]=l[low]

while (low<high)

{

while (low<high&&l[high]>=prvotkey)

--high

l[low]=l[high]

while (low<high&&l[low]<=prvotkey)

++low

l[high]=l[low]

}

l[low]=l[0]

return low

}

void qsort(int l[],int low,int high)

{

int prvotloc

if(low<high)

{

prvotloc=partions(l,low,high) //将第一次排序的结果作为枢轴

qsort(l,low,prvotloc-1)//递归调用排序 由low 到prvotloc-1

qsort(l,prvotloc+1,high)//递归调用排序 由 prvotloc+1到 high

}

}

void quicksort(int l[],int n)

{

qsort(l,1,n)//第一个作为枢轴 ,从第一个排到第n个

}

void main()

{

int a[11]={0,2,32,43,23,45,36,57,14,27,39}

for (int b=1b<11b++)

printf("%3d",a[b])

printf("\n")

quicksort(a,11)

for(int c=1c<11c++)

printf("%3d",a[c])

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7798130.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存