Sort_排序代码集合汇总

这篇博客汇总了多种排序算法的实现,包括插入排序、选择排序、交换排序、归并排序和非比较排序。提供了完整的源代码,包括Sort_all.h、Stack.h、InsertSort.c、SelectSort.c、ExchangeSort.c、MergerSort.c、NonComSort.c、common.c、main.c以及Stack.c。

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

头文件

Sort_all.h

#pragma once
#ifndef _SORT_ALL_H_
#define _SORT_ALL_H_

// 插入排序 
// 直接插入排序 
void InsertSort(int* array, int size);
// 插入排序使用二分进行优化 
void InsertSort_OP(int* array, int size);
// 希尔排序 
void ShellSort(int* array, int size);



// 选择排序 
void SelectSort(int* array, int size);
// 使用每次找最大最小元素对选择排序进行优化 
void SelectSort_OP(int* array, int size);

// 堆调整 向下调整 
void HeapAdjust(int* array, int size, int parent);
// 堆排序 
void HeapSort(int* array, int size);


// 交换排序 
// 冒泡排序 
void BubbleSort(int* array, int size);

// 快速排序 
// 三数取中法 
int GetMidDataIndex(int* array, int left, int right);
// Horn版本分离数据 
int partion1(int* array, int left, int right);
// 挖坑法 
int partion2(int* array, int left, int right);
// 前后指针 
int partion3(int* array, int left, int right);
// 递归实现快速排序 
void QuickSort(int* array, int left, int right);
// 非递归实现快速排序 
void QuickSortNor(int* array, int left, int right);

//归并排序 
// 二路并归,将两组有序的数组合并成一组有序数组 
void MergeData(int* array, int left, int mid, int right, int* temp);
// 归并排序 递归实现 
void MergeSrot(int* array, int size);
// 非递归归并排序 
void MergeSortNor(int* array, int size);


// 非比较排序 

// 计数排序 
void CountSort(int* array, int size);


// 基数排序--低关键码优先 
void RadixSortLSD(int* array, int size);
// 高关键码优先 
void RadixSortMSD(int* array, int size);


void swap(int *data1, int *data2);

void Print(int* array, int size);

#endif

Stack.h

#pragma once

#ifndef _STACK_H_
#define _STACK_H_

#define DataType int 
#define MAX_SIZE 10 

typedef struct Stack
{
    DataType _array[MAX_SIZE];
    int _size;
}Stack;

// 初始化栈 
void StackInit(Stack* s);

// 压栈 
void StackPush(Stack* s, DataType data);

// 出栈 
void StackPop(Stack* s);

// 获取栈顶元素 
DataType StackTop(Stack* s);

// 获取栈中元素个数 
int StackSize(Stack* s);

// 检测栈是否为空 
int StackEmpty(Stack* s);


#endif //_STACK_H_

源文件

0_InsertSort.c

// 插入排序 
#include "Sort_all.h"

//############################################################## 1.1 直接插入排序
// 直接插入排序 
//最优情况下:时间效率为O(n)
//最差情况下:时间复杂度为O(n^2)
//空间复杂度:O(1),它是一种稳定的排序算法
void InsertSort(int* array, int size)
{
    for (int i = 1; i < size; i++)
    {
        int temp = array[i];//存放要插入的数据
        int index = i;
        while (index > 0 && temp < array[index - 1])//查找位置,和前面的数据依次比较,如果比前一个数据小,则将前一个数据后移,继续查找
        {
            array[index] = array[index - 1];//数据后移
            index--;
        }

        if (index != i)
            array[index] = temp;//将要数据插入
    }
}


//############################################################## 1.2  直接插入排序优化 二分法
int _InsertSort_OP(int *array, int left, int right, int data)
{
    if (right > left)
    {
        int mid = left + ((right - left) >> 2);

        if (data >= array[mid])
            return _InsertSort_OP(array, mid + 1, right, data);
        else 
            return _InsertSort_OP(array, left, mid , data);
    }
    else return right;
}

// 插入排序使用二分进行优化 
void InsertSort_OP(int* array, int size)
{
    int InsertAddr;

    for (int i = 1; i < size; i++)
    {
        int temp = array<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值