IO刷题:常用排序算法(C语言)

快速排序

#include <stdio.h>
void swap(int* a,int* b)
{
    int temp=*a;
    *a=*b;
    *b=temp;
}
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 pi = partition(arr,low,high);
        quickSort(arr,low,pi-1);
        quickSort(arr,pi+1,high);
    }
}
void printArray(int *arr,int size)
{
    for(int i=0;i<size;i++)
    {
        printf("%d ",arr[i]);
    }
    puts("");
}

归并排序

#include <stdio.h>
#include <stdlib.h>
void merge(int arr[],int left,int mid,int right)
{
    int n1=mid-left+1;
    int n2=right-mid;
    int *L=(int*)malloc(n1*sizeof(int));
    int *R=(int*)malloc(n2*sizeof(int));
    for(int i=0;i<n1;i++)L[i]=arr[left+i];
    for(int i=0;i<n2;i++)R[i]=arr[mid+i+1];

    int i=0,j=0,k=left;
    while(i<n1&&j<n2)
    {
        if(L[i]<R[j])arr[k++]=L[i++];
        else arr[k++]=R[j++];
    }
    while(i<n1)arr[k++]=L[i++];
    while(j<n2)arr[k++]=R[j++];
    free(L);
    free(R);
}
void mergeSort(int arr[],int left,int right)
{
    if(left<Right)
    {
        int mid=(left+right)>>1;
        mergeSort(arr,left,mid);
        mergeSort(arr,mid+1,right);
        merge(arr,legt,mid,right);
    }
}
void printArray(int arr[],int n)
{
    for(int i=0;i<n;i++)printf("%d ",arr[i]);
    puts("");
}
posted on 2025-08-05 17:34  Mayne  阅读(7)  评论(0)    收藏  举报