排序代码总结

冒泡排序:

#include<stdio.h>

void BubbleSort(int arr[],int nLength)
{
    if(arr == NULL || nLength <= 0)return;

    int i;
    int j;
    int nFlag = 0;
    int nCount = 0;
    for(i = 0;i<nLength;i++)
    {
        nFlag = 0;
        for(j = 0;j<nLength-1-i;j++)
        {
            if(arr[j] > arr[j+1])
            {
                //交换
                arr[j] = arr[j]^arr[j+1];
                arr[j+1] = arr[j]^arr[j+1];
                arr[j] = arr[j]^arr[j+1];

                nFlag = j+1;
            }
            nCount++;
        }

        if(nFlag == 0)
        {
            break;
        }

        i = nLength-nFlag-1;
    }
    printf("%d\n",nCount);
}

int main()
{
    int arr[] = {10,28,1,9,8,29,45,58,70,130};
    BubbleSort(arr,sizeof(arr)/sizeof(arr[0]));

    int i;

    for(i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}
2 选择排序

#include<stdio.h>

void SelectSort(int arr[],int nLength)
{
    if(arr == NULL || nLength <= 0)return;
    
    int i;
    int j;
    int nMin ;
    for(i = 0;i<nLength;i++)
    {
        nMin = i;
        for(j = i+1;j<nLength;j++)
        {
            if(arr[j] < arr[nMin])
            {
                nMin = j;
            }
        }

        //将最小值放入对应位置
        if(nMin != i)
        {
            arr[i] = arr[nMin]^arr[i];
            arr[nMin] = arr[nMin]^arr[i];
            arr[i] = arr[nMin]^arr[i];
        }
    }
}

int main()
{
    int arr[] = {10,28,1,9,8,29,45,58,70,130};
    SelectSort(arr,sizeof(arr)/sizeof(arr[0]));

    int i;

    for(i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}

3 插入排序

#include<stdio.h>

void InsertSort(int arr[],int nLength)
{
    if(arr == NULL || nLength <= 0)return;
    
    int i; //无序的第一个
    int j; //有序的最后一个
    int temp;

    for(i = 1;i<nLength;i++)
    {
        temp = arr[i];

        j = i-1; //有序是无序的前一个

        while(temp < arr[j] && j >= 0)
        {
            arr[j+1] = arr[j];
            j--;
        }

        //元素放入
        arr[j+1] = temp;
    }
}

int main()
{
    int arr[] = {10,28,1,9,8,29,45,58,70,130};
    InsertSort(arr,sizeof(arr)/sizeof(arr[0]));

    int i;

    for(i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}
4 计数排序

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

void CountSort(int arr[],int nLength)
{
    if(arr == NULL || nLength <= 0)return;
    
    //找最大值 最小值
    int nMax;
    int nMin;
    nMin = arr[0];
    nMax = arr[0];

    int i;
    for(i = 1;i<nLength;i++)
    {
        if(arr[i] < nMin)
        {
            nMin = arr[i];
        }
        if(arr[i] > nMax)
        {
            nMax = arr[i];
        }
    }

    //申请计数数组
    int *pCount = NULL;
    pCount = (int*)malloc(sizeof(int)*(nMax-nMin+1));
    memset(pCount,0,sizeof(int)*(nMax-nMin+1));

    //计数
    for(i = 0;i<nLength;i++)
    {
        pCount[arr[i]-nMin]++;
    }

    //排序
    int j = 0;
    for(i = 0;i<nMax-nMin+1;i++)
    {
        while(pCount[i] != 0)
        {
            arr[j] = i+nMin;
            j++;
            pCount[i]--;
        }
    }

    //释放
    free(pCount);
    pCount = NULL;
}

int main()
{
    int arr[] = {10,28,10,9,8,9,4,28,7,10};
    CountSort(arr,sizeof(arr)/sizeof(arr[0]));

    int i;

    for(i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}
5 快排

#include<stdio.h>

int Sort(int arr[],int nLow,int nHigh)
{
    int temp ;
    temp = arr[nLow];
    
    while(nLow < nHigh)
    {

        //从后向前找比标准值小的
        while(nHigh > nLow)
        {
            if(arr[nHigh] < temp)
            {
                //放前面
                arr[nLow] = arr[nHigh];
                nLow++;
                break;
            }

            nHigh--;
        }

        //从前向后找比标准值大的
        while(nLow < nHigh)
        {
            if(arr[nLow] > temp)
            {
                //放后面
                arr[nHigh] = arr[nLow];
                nHigh--;
                break;
            }
            nLow++;
        }
    }

    //标准值放入
    arr[nLow] = temp;
    return nLow;
}

int Sort2(int arr[],int nLow,int nHigh)
{
    int nSmall;
    nSmall = nLow-1;

    for(nLow;nLow<nHigh;nLow++)
    {
        if(arr[nLow] < arr[nHigh])
        {
            //小区间扩张
            if(++nSmall != nLow)
            {
                arr[nSmall] = arr[nSmall]^arr[nLow];
                arr[nLow] = arr[nSmall]^arr[nLow];
                arr[nSmall] = arr[nSmall]^arr[nLow];
            }
        }
    }

    //标准值放入
    if(++nSmall != nHigh)
    {
        arr[nSmall] = arr[nSmall]^arr[nHigh];
        arr[nHigh] = arr[nSmall]^arr[nHigh];
        arr[nSmall] = arr[nSmall]^arr[nHigh];
    }

    return nSmall;
}
void QuickSort(int arr[],int nLow,int nHigh)
{
    if(arr == NULL || nLow >= nHigh)return;

    int nStandard;

    //找到标准值位置
    nStandard = Sort2(arr,nLow,nHigh);

    //根据标准值将数组分两部分
    //两部分分别执行以上操作
    QuickSort(arr,nLow,nStandard-1);
    QuickSort(arr,nStandard+1,nHigh);
}

int main()
{
    int arr[] = {10,28,1,9,8,29,45,58,70,130};
    QuickSort(arr,0,sizeof(arr)/sizeof(arr[0])-1);

    int i;

    for(i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}

6 希尔排序

#include<stdio.h>

void ShellSort(int arr[],int nLength)
{
    if(arr == NULL || nLength <= 0)return;
    
    int nGap;
    int i; //组
    int j;
    int k;
    int temp;

    //间隔
    for(nGap = nLength/2;nGap>=1;nGap/=2)
    {
        //组
        for(i = 0;i<nGap;i++)
        {
            //各组之内插入排序
            for(j = i+nGap;j<nLength;j+=nGap)
            {
                k = j-nGap;//有序的最后一个
                temp = arr[j]; //无序的第一个
                while(temp < arr[k] && k >= i)
                {
                    arr[k+nGap] = arr[k];
                    k-=nGap;
                }

                arr[nGap+k] = temp;
            }
        }
    }
}

int main()
{
    int arr[] = {10,28,1,9,8,29,45,58,70,130};
    ShellSort(arr,sizeof(arr)/sizeof(arr[0]));

    int i;

    for(i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}

7 归并排序

#include<stdio.h>
#include<stdlib.h>

void Merge(int arr[],int nLow,int nHigh)
{
    int nBegin1;
    int nBegin2;
    int nEnd1;
    int nEnd2;


    nBegin1 = nLow;
    nEnd1 = nLow+(nHigh-nLow)/2;
    nBegin2 = nEnd1+1;
    nEnd2 = nHigh;

    int *pTemp = NULL;
    pTemp = (int*)malloc(sizeof(int)*(nHigh-nLow+1));

    int i = 0;

    while(nBegin1 <= nEnd1 && nBegin2 <= nEnd2)
    {
        if(arr[nBegin1] < arr[nBegin2])
        {
            pTemp[i] = arr[nBegin1];
            i++;
            nBegin1++;
        }
        else
        {
            pTemp[i] = arr[nBegin2];
            i++;
            nBegin2++;
        }
    }

    //有剩余的数组元素放入辅助空间
    while(nBegin2 <= nEnd2)
    {
        pTemp[i] = arr[nBegin2];
        i++;
        nBegin2++;
    }

    while(nBegin1 <= nEnd1)
    {
        pTemp[i] = arr[nBegin1];
        i++;
        nBegin1++;
    }

    //元素放回原数组
    for(i = 0;i<nHigh-nLow+1;i++)
    {
        arr[nLow+i] = pTemp[i];
    }

    //释放
    free(pTemp);
    pTemp = NULL;
}

void MergeSort(int arr[],int nLow,int nHigh)
{
    if(arr == NULL || nLow >= nHigh)return;
    
    int nMid;
    nMid = nLow+(nHigh-nLow)/2;

    //拆分
    MergeSort(arr,nLow,nMid);
    MergeSort(arr,nMid+1,nHigh);

    //合并
    Merge(arr,nLow,nHigh);

}

int main()
{
    int arr[] = {10,28,1,9,8,29,45,58,70,130};
    MergeSort(arr,0,sizeof(arr)/sizeof(arr[0])-1);

    int i;

    for(i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}

8 堆排序

#include<stdio.h>

#define LEFT 2*nRootID+1
#define RIGHT 2*nRootID+2

void Adjust(int arr[],int nLength,int nRootID)
{
    while(1)
    {
        //两个孩子
        if(RIGHT < nLength)
        {
            //两个里找大的
            if(arr[LEFT]>arr[RIGHT])
            {
                //大的和父亲比
                if(arr[LEFT] > arr[nRootID])
                {
                    arr[LEFT] = arr[LEFT]^arr[nRootID];
                    arr[nRootID] = arr[LEFT]^arr[nRootID];
                    arr[LEFT] = arr[LEFT]^arr[nRootID];

                    nRootID = LEFT;
                    continue;
                }
                else
                {
                    break;
                }
            }
            else
            {
                //大的和父亲比
                if(arr[RIGHT] > arr[nRootID])
                {
                    arr[RIGHT] = arr[RIGHT]^arr[nRootID];
                    arr[nRootID] = arr[RIGHT]^arr[nRootID];
                    arr[RIGHT] = arr[RIGHT]^arr[nRootID];

                    nRootID = RIGHT;
                    continue;
                }
                else
                {
                    break;
                }
            }
        }
        //一个孩子
        else if(LEFT < nLength)
        {
            //大的和父亲比
            if(arr[LEFT] > arr[nRootID])
            {
                arr[LEFT] = arr[LEFT]^arr[nRootID];
                arr[nRootID] = arr[LEFT]^arr[nRootID];
                arr[LEFT] = arr[LEFT]^arr[nRootID];

                nRootID = LEFT;
                continue;
            }
            else
            {
                break;
            }
        }
        //没有孩子
        else
        {
            break;
        }
    }
}


void Adjust2(int arr[],int nLength,int nRootID)
{
    int MAX;

    for(MAX = LEFT;MAX < nLength; MAX = LEFT)
    {
        //两个孩子
        if(RIGHT < nLength)
        {
            if(arr[MAX] < arr[RIGHT])
            {
                MAX = RIGHT;
            }
        }

        //大的和父亲比
        if(arr[MAX] > arr[nRootID])
        {
            arr[MAX] = arr[nRootID]^arr[MAX];
            arr[nRootID] = arr[nRootID]^arr[MAX];
            arr[MAX] = arr[nRootID]^arr[MAX];

            nRootID = MAX;
        }
        else
        {
            break;
        }
    }
}

void HeapSort(int arr[],int nLength)
{
    if(arr == NULL || nLength <= 0)return;

    //建堆
    int i;
    for(i = nLength/2-1;i>=0;i--)
    {
        //调整父亲节点
        Adjust2(arr,nLength,i);
    }

    //排序
    for(i = nLength-1;i>0;i--)
    {
        arr[0] = arr[0]^arr[i];
        arr[i] = arr[0]^arr[i];
        arr[0] = arr[0]^arr[i];
        
        Adjust2(arr,i,0);
    }
}
int main()
{
    int arr[] = {10,28,98,27,19,30,66,0,27,1,8};
    HeapSort(arr,sizeof(arr)/sizeof(arr[0]));

    int i;
    for(i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}

9  桶排

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

typedef struct node
{
    int nValue;
    struct node *pNext;
    struct node *pPre;
}Bucket;


void Sort(Bucket *pHead)
{
    if(pHead == NULL  || pHead->pNext == NULL)return;

    //插入
    Bucket *pSort = NULL;
    Bucket *pUnSort = NULL;
    int temp;

    pUnSort = pHead->pNext;

    while(pUnSort != NULL)
    {
        pSort = pUnSort->pPre; //有序的最后一个
        temp = pUnSort->nValue;//无序第一个

        while(pSort != NULL && pSort->nValue > temp)
        {
            pSort->pNext->nValue = pSort->nValue;
            pSort = pSort->pPre;
        }

        //值放入
        if(pSort == NULL)
        {
            pHead->nValue = temp;
        }
        else
        {
            pSort->pNext->nValue = temp;
        }

        pUnSort = pUnSort->pNext;
    }
}

void BucketSort(int arr[],int nLength)
{
    if(arr == NULL || nLength <= 0)return;
    
    //找最大值最小值
    int i;
    int nMin;
    int nMax;
    nMin = arr[0];
    nMax = arr[0];

    for(i = 1;i<nLength;i++)
    {
        if(arr[i] < nMin)
        {
            nMin = arr[i];
        }

        if(arr[i] > nMax)
        {
            nMax = arr[i];
        }
    }

    //拆位
    int nNum = nMin;
    int nCount = 1;

    while(nNum)
    {
        nNum/=10;
        nCount*=10;
    }
    
    nCount/=10;

    int nMinIndex;
    int nMaxIndex;

    nMinIndex = nMin/nCount;
    nMaxIndex = nMax/nCount;

    //申请桶
    Bucket **pBucket = NULL;
    pBucket = (Bucket**)malloc(sizeof(Bucket*)*(nMaxIndex-nMinIndex+1));
    memset(pBucket,0,sizeof(Bucket*)*(nMaxIndex-nMinIndex+1));

    //元素入桶
    Bucket *pTemp = NULL;
    for(i = 0;i<nLength;i++)
    {
        nNum = arr[i]/nCount-nMinIndex;

        pTemp = (Bucket*)malloc(sizeof(Bucket));
        pTemp->nValue = arr[i];

        pTemp->pNext = pBucket[nNum];
        pTemp->pPre = NULL;

        if(pBucket[nNum] != NULL)
        {
            pBucket[nNum]->pPre = pTemp;
        }

        pBucket[nNum] = pTemp;
    }

    //各桶之内排序
    for(i = 0;i<nMaxIndex-nMinIndex+1;i++)
    {
        Sort(pBucket[i]);
    }

    //桶内元素放回原数组
    nNum = 0;
    for(i = 0;i<nMaxIndex-nMinIndex+1;i++)
    {
        pTemp = pBucket[i];

        while(pTemp)
        {
            arr[nNum] = pTemp->nValue;
            nNum++;
            pTemp = pTemp->pNext;
        }
    }

    //释放
    Bucket *pDel = NULL;
    for(i = 0;i<nMaxIndex-nMinIndex+1;i++)
    {
        pTemp = pBucket[i];
        while(pTemp)
        {
            pDel = pTemp;
            pTemp = pTemp->pNext;
            free(pDel);
            pDel = NULL;
        }
    }


    free(pBucket);
    pBucket = NULL;
}

int main()
{
    int arr[] = {1099,2208,1981,2879,3458,5629,1345,8958,2870,4130};
    BucketSort(arr,sizeof(arr)/sizeof(arr[0]));

    int i;

    for(i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}

10  基数排序

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

typedef struct node
{
    int nValue;
    struct node *pNext;
}Radix;

void Sort(int arr[],int nLength,Radix **pRadix,int nBegin)
{
    //基数
    int nBase = 1;

    while(nBegin > 1)
    {
        nBase*=10;
        nBegin--;
    }

    //入桶
    int nIndex;
    int i;
    Radix *pTemp = NULL;
    Radix *pNode = NULL;
    for(i = 0;i<nLength;i++)
    {
        nIndex = arr[i]/nBase%10;
        
        pTemp = (Radix*)malloc(sizeof(Radix));
        pTemp->nValue = arr[i];
        pTemp->pNext = NULL;
        
        //尾添加
        if(pRadix[nIndex] == NULL)
        {
            pRadix[nIndex] = pTemp;
        }
        else
        {
            pNode = pRadix[nIndex];
            while(pNode->pNext != NULL)
            {
                pNode = pNode->pNext;
            }

            pNode->pNext = pTemp;
        }
    }

    //数据放回原数组
    nBegin = 0;
    for(i = 0;i<10;i++)
    {
        pNode = pRadix[i];
        while(pNode)
        {
            arr[nBegin] = pNode->nValue;
            nBegin++;
            pNode = pNode->pNext;
        }
    }

    //空间释放
    for(i = 0;i<10;i++)
    {
        pTemp = pRadix[i];
        while(pTemp)
        {
            pNode = pTemp;
            pTemp = pTemp->pNext;
            free(pNode);
            pNode = NULL;
        }
    }
    
    //清空表头
    memset(pRadix,0,sizeof(Radix*)*10);
}

void RadixSort(int arr[],int nLength)
{
    if(arr == NULL || nLength <= 0)return;
    
    //找最大值
    int i;
    int nMax;
    nMax = arr[0];

    for(i = 1;i<nLength;i++)
    {
        if(arr[i] > nMax)
        {
            nMax = arr[i];
        }
    }

    //拆位
    int nNum = nMax;
    int nCount = 0;

    while(nNum)
    {
        nNum/=10;
        nCount++;
    }

    //申请桶
    Radix **pRadix = NULL;
    pRadix = (Radix**)malloc(sizeof(Radix*)*10);
    memset(pRadix,0,sizeof(Radix*)*10);

    //按位入桶
    for(i = 1;i<= nCount;i++)
    {
        Sort(arr,nLength,pRadix,i);
    }

    free(pRadix);
    pRadix = NULL;
}

int main()
{
    int arr[] = {19,208,81,9,38,529,145,858,270,30};
    RadixSort(arr,sizeof(arr)/sizeof(arr[0]));

    int i;

    for(i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    return 0;
}
 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示 社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL数据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL数据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值