排序算法

#include<iostream>
#define MAX 100
using namespace std;
//倒序排列
//选择排序  简单选择排序|二元选择排序|堆排序
void simpleSort(int *arr,int length){
    int i,j;
    i=j=0;

    for(i=0;i<length-1;i++){
        for(j=i+1;j<length;j++){
            //降序排列
            if(arr[i]<arr[j]){
                arr[i]^=arr[j];
                arr[j]^=arr[i];
                arr[i]^=arr[j];
            }
        }
    }
}
//插入排序 直接插入排序和希尔排序
//直接插入排序
void insertSort(int *arr,int length){
    int i;
    for(i=1;i<length;i++){
        if(arr[i]>arr[i-1]){
            int x=i;
            int temp = arr[i];
            while((x>=1) && (arr[x-1]<temp)){
                arr[x]=arr[x-1];
                x--;
            }
            arr[x]=temp;
        }
    }
}
void ShellInsertSort(int *arr, int length, int dk)  
{  
    for(int i= dk; i<length; i++){  
        if(arr[i] > arr[i-dk]){         //若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入  
            int x=i;
            int temp = arr[i];
            while((x>=dk) && (arr[x-dk]<temp)){
                arr[x]=arr[x-dk];
                x-=dk;
            }
            arr[x]=temp;
        } 
    }  

}  

/** 
 * 先按增量d(n/2,n为要排序数的个数进行希尔排序 
 * 
 */  
void shellSort(int *arr, int length){
    int dk = length/2;
    while( dk >= 1  ){  
        ShellInsertSort(arr, length, dk);  
        dk = dk/2;  
    }  
} 
//交换排序 冒泡排序,快速排序
void bubbleSort(int *arr,int length){
    int i,j;
    for(i=1;i<length;i++){
        for(j=0;j<length-i;j++){
            if(arr[j+1]>arr[j]){
                arr[j]^=arr[j+1];
                arr[j+1]^=arr[j];
                arr[j]^=arr[j+1];
            }
        }
    }
}
//快速排序
void quicksort(int *arr, int left, int right){
    if(left < right){
        int key = arr[left];
        int low = left;
        int high = right;
        while(low < high){
            while(low < high && arr[high] < key){
                high--;
            }
            arr[low] = arr[high];
            while(low < high && arr[low] > key){
                low++;
            }
            arr[high] = arr[low];
        }
        arr[low] = key;
        quicksort(arr,left,low-1);
        quicksort(arr,low+1,right);
    }
}
/********************************************************
*函数名称:Merge
*参数说明:pDataArray 无序数组;
*          int *pTempArray 临时存储合并后的序列
*          bIndex 需要合并的序列1的起始位置
*          mIndex 需要合并的序列1的结束位置
                  并且作为序列2的起始位置
*          eIndex 需要合并的序列2的结束位置
*说明:    将数组中连续的两个子序列合并为一个有序序列
*********************************************************/
void Merge(int* pDataArray, int *pTempArray, int bIndex, int mIndex, int eIndex)
{
    int mLength = eIndex - bIndex;    //合并后的序列长度
    int i = 0;    //记录合并后序列插入数据的偏移
    int j = bIndex;    //记录子序列1插入数据的偏移
    int k = mIndex;    //记录子序列2掺入数据的偏移
    while (j < mIndex && k < eIndex)
    {
        if (pDataArray[j] <= pDataArray[k])
        {
            pTempArray[i++] = pDataArray[j];
            j++;
        }
        else
        {
            pTempArray[i++] = pDataArray[k];
            k++;
        }
    }
    if (j == mIndex)    //说明序列1已经插入完毕
        while (k < eIndex)
            pTempArray[i++] = pDataArray[k++];
    else                //说明序列2已经插入完毕
        while (j < mIndex)
            pTempArray[i++] = pDataArray[j++];
    for (i = 0; i < mLength; i++)    //将合并后序列重新放入pDataArray
        pDataArray[bIndex + i] = pTempArray[i];
}
/********************************************************
*函数名称:BottomUpMergeSort
*参数说明:pDataArray 无序数组;
*           iDataNum为无序数据个数
*说明:    自底向上的归并排序
*********************************************************/
void BottomUpMergeSort(int* pDataArray, int iDataNum)
{
    int *pTempArray = (int *)malloc(sizeof(int) * iDataNum);    //临时存放合并后的序列
    int length = 1;    //初始有序子序列长度为1
    while (length < iDataNum)
    {
        int i = 0;
        for (; i + 2*length < iDataNum; i += 2*length)
            Merge(pDataArray, pTempArray, i, i + length, i + 2*length);
        if (i + length < iDataNum)
            Merge(pDataArray, pTempArray, i, i + length, iDataNum);
        length *= 2;    //有序子序列长度*2
    }
    free(pTempArray);
}
void printArr(int *arr,int length){
    int i;
    for(i=0;i<length;i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}
int main()
{
    int arr[MAX]={23,13,42,63,3,24,262,52,7,85,43,90};
    int length = 12;
    printArr(arr,length);
    BottomUpMergeSort(arr,length);
    printArr(arr,length);
}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
综合小区管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、车位管理、车位分配管理、出入管理、字典管理、房屋管理、物业费缴纳管理、公告管理、物业人员投诉管理、我的私信管理、物业人员管理、用户管理、管理员管理。用户的功能包括管理部门以及部门岗位信息,管理招聘信息,培训信息,薪资信息等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 综合小区管理系统管理系统可以提高综合小区管理系统信息管理问题的解决效率,优化综合小区管理系统信息处理流程,保证综合小区管理系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理综合小区管理系统信息,包括出入管理,报修管理,报修管理,物业费缴纳等,可以管理操作员。 出入管理界面,管理员在出入管理界面中可以对界面中显示,可以对招聘信息的招聘状态进行查看,可以添加新的招聘信息等。报修管理界面,管理员在报修管理界面中查看奖罚种类信息,奖罚描述信息,新增奖惩信息等。车位管理界面,管理员在车位管理界面中新增。公告管理界面,管理员在公告管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值