排序算法

本文介绍了几种常见的排序算法,包括冒泡排序、插入排序、并归排序、快速排序和选择排序,并提供了每种算法的C语言实现。通过这些实现,读者可以更好地理解不同排序算法的工作原理及其优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个是头文件sort.h

#define ARRAY_NUM 20
int * create_array(void);
void random_array(int *);
void print_array(int *);
void free_array(int *);
void swap_element(int *,int *);

以下是myarray.c作用是随机产生int型数组,以及打印数组,释放内存空间

/*************************************************************************
    > File Name: make_array.c
    > Author: regan
    > Mail: regan@thtfit.com 
    > Created Time: Thu 03 Mar 2016 09:57:27 AM CST
 ************************************************************************/

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include"sort.h"

//make array
int * create_array(void){
    int * array_desc = NULL;
    array_desc = malloc(sizeof(int) * ARRAY_NUM);
    memset(array_desc,0,ARRAY_NUM);
    return array_desc;
}

//random the array
void random_array(int * array_pr){
    int i = 0;
    srand((unsigned int)time(NULL));
    for(i=0;i<ARRAY_NUM;i++){
        * array_pr =rand() % 100;
        array_pr++;
    }
}

//print the array
void print_array(int * array_pr){
    int i = 0;
    printf("the array is: ");
    for(i=0;i<ARRAY_NUM;i++){
        printf("%d ",*array_pr);
        array_pr++;
    }
    printf("\n");
}

//free the array's memery
void free_array(int * array_pr){
    free(array_pr);
}

//swap the element of array
void swap_element(int * a,int * b){
    int temp = 0;
    temp = *a;
    *a = *b;
    *b = temp;
}

冒泡排序

/*************************************************************************
    > File Name: insert_sort.c
    > Author: regan
    > Mail: regan@thtfit.com 
    > Created Time: Thu 03 Mar 2016 09:55:05 AM CST
 ************************************************************************/

#include<stdio.h>
#include<stdbool.h>
#include "sort.h"

void bubble_sort(int *);
int main(){
    int * array = NULL;
    array = create_array();
    random_array(array);
    print_array(array);
    bubble_sort(array);
    print_array(array);
    free_array(array);
    return 0;
}

void bubble_sort(int * array_pr){
    int i = 0;
    bool swapped;
    do{
        swapped = false;
        for(i = 0;i< ARRAY_NUM-1;i++){
            if(*(array_pr+i) > *(array_pr+i+1)){
                swap_element(array_pr+i,array_pr+i+1);
                swapped = true;
            }
        }
    } while(swapped);
}

插入排序

/*************************************************************************
    > File Name: insert_sort.c
    > Author: regan
    > Mail: regan@thtfit.com 
    > Created Time: Thu 03 Mar 2016 09:55:05 AM CST
 ************************************************************************/

#include<stdio.h>
#include "sort.h"
void insert_sort(int *);

int main(){
    int * array = NULL;
    array = create_array();
    random_array(array);
    print_array(array);
    insert_sort(array);
    print_array(array);
    free_array(array);
    return 0;
}

void insert_sort(int * array_pr){
    int i = 0,j = 0;
    int current;
    for(i = 1; i < ARRAY_NUM;i++){
        current = *(array_pr + i);
        j = i - 1;
        while(j >= 0 && *(array_pr+j)>current){
            *(array_pr+j+1) = *(array_pr+j);
            j--;
        }
        *(array_pr+j+1) = current;
    }
}

并归排序

/*************************************************************************
    > File Name: insert_sort.c
    > Author: regan
    > Mail: regan@thtfit.com 
    > Created Time: Thu 03 Mar 2016 09:55:05 AM CST
 ************************************************************************/

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "sort.h"

void merge_sort(int *,int);
int main(){
    int * array = NULL;
    array = create_array();
    random_array(array);
    print_array(array);
    merge_sort(array,ARRAY_NUM);
    print_array(array);
    free_array(array);
    return 0;
}

void merge_sort(int * array_pr,int num){
    int i = 0;
    int * temppr = NULL;
    i = num/2;
    if(i>1){
        merge_sort(array_pr,i);
    }
    if((num-i)>1){
        merge_sort(array_pr+i,num-i);
    }
    temppr = malloc(sizeof(int)*num);
    int a=0;
    int m=0,n=0;
    while((n<num-i) && (m<i))
    {
        if(*(array_pr+i+n)<*(array_pr+m))
        {
            *(temppr+a) = *(array_pr+i+n);
            n++;
            a++;
        }else{
            *(temppr+a) = *(array_pr+m);
            m++;
            a++;
        }
    }
    while(n<num-i){
        *(temppr+a) = *(array_pr+i+n);
        n++;
        a++;
    }
    while(m<i){
        *(temppr+a) = *(array_pr+m);
        m++;
        a++;
    }
    memcpy(array_pr,temppr,sizeof(int)*num);
}

快速排序

/*************************************************************************
    > File Name: insert_sort.c
    > Author: regan
    > Mail: regan@thtfit.com 
    > Created Time: Thu 03 Mar 2016 09:55:05 AM CST
 ************************************************************************/

#include<stdio.h>
#include "sort.h"

void quick_sort(int * ,int);
int main(){
    int * array = NULL;
    array = create_array();
    random_array(array);
    print_array(array);
    quick_sort(array,ARRAY_NUM);
    print_array(array);
    free_array(array);
    return 0;
}

void quick_sort(int * array_pr,int num){
    int i=0,j=0;
    j = num - 1;
    if(i>=j){
        return;
    }
    int comp = 0;
    comp = *array_pr;
    while(i<j){
        while(*(array_pr+j)>=comp && i<j){
            j--;
        }
        *(array_pr+i)=*(array_pr+j);
        while(*(array_pr+i)<=comp && i<j){
            i++;
        }
        *(array_pr+j)=*(array_pr+i);
    }
    *(array_pr+i) = comp;

    if(i>1)
        quick_sort(array_pr,i);
    if((num-i)>1)
        quick_sort(array_pr+i+1,num-1-i);
}

选择排序

/*************************************************************************
    > File Name: insert_sort.c
    > Author: regan
    > Mail: regan@thtfit.com 
    > Created Time: Thu 03 Mar 2016 09:55:05 AM CST
 ************************************************************************/

#include<stdio.h>
#include "sort.h"
void selection_sort(int *);
int main(){
    int * array = NULL;
    array = create_array();
    random_array(array);
    print_array(array);
    selection_sort(array);
    print_array(array);
    free_array(array);
    return 0;
}

void selection_sort(int * array_pr){
    int min = 0;
    int i = 0,j = 0;
    for(i = 0;i<ARRAY_NUM;i++){
        min = i;
        for(j = i+1;j<ARRAY_NUM;j++){
            if(*(array_pr+min)> *(array_pr+j)){
                min = j;
            }
        }
        if(min != i){
            swap_element(array_pr+i,array_pr+min);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值