C语言及程序设计进阶例程-25 排序问题及其求解

    xiaoxiao2025-09-15  10

    贺老师教学链接 C语言及程序设计进阶 本课讲解

    快速排序实现

    #include<stdio.h> void quicksort(int data[],int first,int last) { int i, j, t, base; if (first>last) return; base=data[first]; /*用首元素作为基数*/ i=first; j=last; while(i!=j) /*重复下面的过程,直到i和j相遇*/ { while(data[j]>=base && i<j) /*j从右向左,找到小于基数的元素*/ j--; while(data[i]<=base && i<j) /*i从左向右,找到大于基数的元素*/ i++; /*当i和j没有相遇有时候,交换两个数*/ if(i<j) { t=data[i]; data[i]=data[j]; data[j]=t; } } data[first]=data[i]; /*将i,j相遇处的值保存在基数位置*/ data[i]=base; /*将基数保存在其应该的位置*/ quicksort(data,first,i-1); /*用同样的策略,递归处理左边的部分*/ quicksort(data,i+1,last); /*用同样的策略,递归处理右边的部分*/ } int main( ) { int data[10] = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8}; quicksort(data, 0,9); int i; for(i=0; i<10; i++) printf("%d ", data[i]); printf("\n"); return 0; }

    非比较类排序算法:简单计数排序

    #include <stdio.h> int main() { int A[10] = {6,1,12,6,18,1,18,7,0,6}; /*通过初始化给出待排序值*/ int C[21] = {0}; /*用于计数的C数组的所有元素初值为0*/ int i, j; /*为每一个待排序的数计数*/ for(i=0; i<10; i++) C[A[i]]++; /*例如,A[i]为6时,C[6]++,C[i]是i出现的次数*/ /*根据计数信息输出*/ for(i=0; i<21; i++) /*考察待排序数据范围内的每一个数i*/ for(j=1; j<=C[i]; j++) /*输出C[i]个i,此即是排序的结果*/ printf("%d ", i); printf("\n"); return 0; } 相关资源:python入门教程(PDF版)
    最新回复(0)