Darren_pty

导航

2-C语言 排序算法

 

(1)冒泡法排序法

#include<stdio.h>

void sort(int arr[], int num);

int main(void)
{
    int arr[10];
    int i;

    printf("please enter ten numbers:\n");
    for (i = 0; i<10; i++)
        scanf("%d", &arr[i]);//scanf不能接收空格和回车符
    sort(arr,10);
    for (i = 0; i<10; i++)
        printf("%d\t", arr[i]);
    return 0;
}


void sort(int arr[],int num)
{
    int i,j= 0;
    int temp = 0;

    //冒泡法进行排序 
    for (i = 0; i < num-1; i++) //进行比较num-1趟  
    {
        for (j = 0; j < num - 1 - i; j++)  //比较次数依次递减 
        {
            if (arr[j]>arr[j + 1])
            {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

 

 

(2)选择排序法

#include<stdio.h>

void sort(int arr[], int num);

int main(void)
{
    int arr[10];
    int i;

    printf("please enter ten numbers:\n");
    for (i = 0; i<10; i++)
        scanf("%d", &arr[i]);//scanf不能接收空格和回车符
    sort(arr,10);
    for (i = 0; i<10; i++)
        printf("%d\t", arr[i]);
    return 0;
}

//选择法(减少交换次数)
void sort(int arr[],int num)
{
    int i, j, k = 0;
    int temp = 0;

    for (i = 0; i < num-1; i++)//依次选取第一个数
    {
        k = i; //标记最小值
        for (j = i + 1; j<num; j++)//要比较的数
        {
            if (arr[k]>arr[j])
            {
                k = j;
            }
        }
        //找到第0,1,2,3,... 先找最小的
        if (k != i)
        {
            temp = arr[i];//交换arr[k]和arr[i]的值
            arr[i] = arr[k];
            arr[k] = temp;
        }
    }
}

 

 

(3)递归排序法

#include<stdio.h>

void quick(int arr[], int L, int R);

int main()
{
    int arr[10];
    int i;

    printf("please enter ten numbers:\n");
    for (i = 0; i<10; i++)
        scanf("%d", &arr[i]);
    quick(arr, 0, 9);
    for (i = 0; i<10; i++)
        printf("%d\t", arr[i]);
    return 0;
}
void quick(int arr[], int L, int R)
{
    int i = R;
    int j = L;
    int pivot = arr[(i + j) / 2]; //中间
    while (j <= i)
    {
        while (arr[j]<pivot){
            j++;
        }
        while (pivot<arr[i]){
            i--;
        }
        if (j <= i)
        {
            int temp = arr[j];
            arr[j] = arr[i];
            arr[i] = temp;
            j++;
            i--;

        }
    }
    if (L<i) quick(arr, L, i);
    if (j<R) quick(arr, j, R);
}

 

posted on 2020-07-02 12:29  Darren_pty  阅读(160)  评论(0编辑  收藏  举报