排序总结

代码参考<<数据结构与算法分析-c语言描述>>

复杂度分析略。

1.插入排序

void insertionSort(ElementType A[], int N)
{
    int j;
    for (int i = 1; i < N; ++i)
    {
        int tem = A[i];
        for (j = i; j > 0 && tem < A[j - 1]; j--)
        {
            A[j] = A[j - 1];
        }
        A[j] = tem;
    }
}

2.堆排序

void percDown(ElementType A[], int i, int N)          //明确函数的作用
{                                                   //在有N个元素的堆中,调整第i个元素
    int child;
    int tem;
    for (tem = A[i]; 2 * i + 1 < N; i = child)      //终止条件左儿子不存在
    {
        child = 2 * i + 1;
        if (child + 1 < N && A[child + 1] > A[child])           //若右儿子存在,则选择左右儿子中较大的
        {
            child++;
        }
        if (A[child] > tem)                         //若儿子中有比A[i]大的元素,则将空穴下移
            A[i] = A[child];
        else
            break;
    }
    A[i] = tem;
}
void heapSort(ElementType A[], int N)
{
    for (int i = N / 2; i >= 0; --i)
    {
        percDown(A, i, N);              //建堆
    }

    for (int i = N - 1; i > 0; --i)
    {
        int tem;                     //将最大的元素放到最后,最后的元素放到首元素
        tem = A[0];
        A[0] = A[i];
        A[i] = tem;

        percDown(A, 0, i);                  //调整首元素的位置,以保持堆序性
    }
}

3.并合排序

void merge(ElementType A[], ElementType temArray[], int begin, int center, int end)       //并合左右部分
{
    int lpos = begin;
    int rpos = center + 1;
    int lEnd = center;
    int rEnd = end;
    int pos = begin;
    while (lpos <= lEnd && rpos <= rEnd)
    {
        if (A[lpos] < A[rpos])
            temArray[pos++] = A[lpos++];
        else
            temArray[pos++] = A[rpos++];
    }

    while (lpos <= lEnd)
        temArray[pos++] = A[lpos++];
    while (rpos <= rEnd)
        temArray[pos++] = A[rpos++];

    for (int i = begin; i <= end; i++)          //重新将排序后的元素拷贝到原数组中
        A[i] = temArray[i];
}
void MSort(ElementType A[], ElementType temArray[], int begin, int end)         //递归地将由begin,end指示首位的数组排序后,放入temArray中
{
    int center = (begin + end) / 2;
    if (begin < end)
    {
        MSort(A, temArray, begin, center);                              //排序左半部分
        MSort(A, temArray, center + 1, end);                            //排序右半部分
        merge(A, temArray, begin, center, end);                                                         //并合
    }
}
void mergeSort(ElementType A[], int N)              //归并排序,递归分治
{
    ElementType *temArray = (ElementType*)malloc(sizeof(ElementType) * N);
    if (temArray != NULL)
    {
        MSort(A, temArray, 0, N - 1);
        free(temArray);
    }
    else
    {
        cout << "out of space!";
        exit(1);
    }
}

4.快速排序

void swap(int *a, int *b)
{
    int tem;
    tem = *a;
    *a = *b;
    *b = tem;
}

void Qsort(int A[], int Left, int Right)
{
    if (Left < Right)
    {
        int i;
        int j;
        int center = (Left + Right) / 2;            //选取枢纽元
        int pivot = A[center];
        swap(A[center], A[Right]);                  //将枢纽元置后
        i = Left;
        j = Right - 1;
        while (1)                                   //以枢纽元为标准分割左右区块
        {
            while (A[i] < pivot && i < Right)           //****遇到与枢纽元相同的元素停止*****
                i++;
            while (A[j] > pivot && j > 0)
                j--;
            if (i <= j)
                swap(A[i++], A[j--]);               //***交换后记得更新i,j的值***
            else
                break;
        }//end while
        swap(A[i], A[Right]);                   //将枢纽元置位,完成分割
        Qsort(A, Left, i - 1);                    //递归排序左半部分
        Qsort(A, i + 1, Right);                     //递归排序有半部分

    }//end if
}

void qsort(int A[], int N)
{
    Qsort(A, 0, N - 1);
}


在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值