伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

快速排序(正序+倒序)C语言版

来源:本站原创 浏览:42次 时间:2023-07-20

正序

#include <stdio.h>void sort(int *, int, int);void sort(int arr[], int left, int right){    // 如果数组(子数组)只有1个元素时直接返回    if (left == right) {        return;    }    // i为左向右移动位置指针,j为右向左移动位置指针    int i, j, tmp;    // 第1个元素作为本轮排序的参考值    i = left + 1;    j = right;    while (i < j) {        // 必须j先查找,条件匹配即停止        // while (i < j && arr[j] > arr[left]) {        while (i < j && !(arr[j] <= arr[left])) {            j--;        }        // i开始查找,条件匹配即停止        // while (i < j && arr[i] <= arr[left]) {        while (i < j && !(arr[i] > arr[left])) {            i++;        }        // 交换i和j位置的数值,可能是两个位置,也可能是同位置(虽然多余,但不影响结果)        tmp = arr[i];        arr[i] = arr[j];        arr[j] = tmp;    }    // 执行到这里本轮的i,j查找已经结束,且两者位置重合,重合位置为拆分数组的分隔点    // 参考值>i位置交换(因本次为正序)    if (arr[left] > arr[i]) {        tmp = arr[left];        arr[left] = arr[i];        arr[i] = tmp;    }    // 拆分为2个数组递归,左子数组不包含拆分点,右数组在至少包含拆分点本身1个元素(在本轮子数组为2个元素时的情况)    sort(arr, left, i - 1);    sort(arr, i, right);}int main(void){    int arr[] = {12, 3, 7, 25, 11, 5, 23, 5, 0};    int length;    length = sizeof(arr) / sizeof(int);    sort(arr,  0, length - 1);    printf("-------------------\n");    for ( int i = 0; i < length; i++ ) {        printf("%d, ", arr[i]);    }    printf("\n");    return 0;}

倒序

#include <stdio.h>void sort(int *, int, int);void sort(int arr[], int left, int right){    if (left == right) {        return;    }    int i, j, tmp;    i = left + 1;    j = right;    while (i < j) {        while (i < j && arr[j] < arr[left]) {        //while (i < j && !(arr[j] >= arr[left])) {            j--;        }        while (i < j && arr[i] >= arr[left]) {        //while (i < j && !(arr[i] < arr[left])) {            i++;        }        tmp = arr[i];        arr[i] = arr[j];        arr[j] = tmp;    }    if (arr[left] < arr[i]) {        tmp = arr[left];        arr[left] = arr[i];        arr[i] = tmp;    }    sort(arr, left, i - 1);    sort(arr, i, right);}int main(void){    int arr[] = {12, 3, 7, 25, 11, 5, 23, 5, 0};    int length;    length = sizeof(arr) / sizeof(int);    sort(arr,  0, length - 1);    printf("-------------------\n");    for ( int i = 0; i < length; i++ ) {        printf("%d, ", arr[i]);    }    printf("\n");    return 0;}

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net