• C语言排序算法


    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
    
    #define ARRAYSIZE 10
    
    int data[ARRAYSIZE];
    
    void initData()
    {
        int i = 0;
        srand((int)time(0));
        for(;i<ARRAYSIZE;i++)
        {
            data[i] = (int)(100*rand()/(RAND_MAX + 1.0)) + 1;
        }
    }
    void printData(char *string)
    {
        int i = 0;
        printf("%s\n",string);
        for(;i<ARRAYSIZE;i++)
        {
            printf("%-4d",data[i]);
        }
        printf("\n");
    }
    void swap(int i,int j)
    {
        int temp;
        temp = data[i];
        data[i] = data[j];
        data[j] = temp;
    }
    /*直接插入排序。从第一个元素开始,形成长度为1,2,3乃至N的有序数组,
    选取第N+1个元素插入到有序数组中,直到最后一个元素,从而形成有序排列的数组*/
    void DirectInsertSort(int data[], int length)
    {
        int index = 1;
        int left;
        int temp;
        while(index < length)
        {
            left = index - 1;
            temp = data[index];
            if(temp > data[index-1])
            {
                index++;
                continue;
            }
            else
            {
                while(left >= 0 && data[left] > temp)
                {
                    data[left+1] = data[left];
                    left--;
                }
                data[left+1] = temp;
                index++;
            }
        }
    }
    /*冒泡排序。如其名,从第一个元素开始,依次比较相邻的两个元素
    并始终保证较大的元素在右侧,从而通过一次次的排序将大元素放在右侧小元素放在左侧。*/
    void BubbleSort(int data[], int length)
    {
        int index = length - 1;
        int i;
        int flag = -1;
        while(index > 1)
        {
            for(i = 0;i < index;i++)
            {
                if(data[i] > data[i+1])
                {
                    swap(i,i+1);
                    flag = 1;
                }
            }
            index--;
            if(flag==-1)
                break;
        }
    }
    /*选择排序。顾名思意,就是直接从待排序数组里选择一个最小(或最大)的数字,
    每次都拿一个最小数字出来,顺序放入新数组,直到全部拿完*/
    void SelectSort(int data[], int length)
    {
        int index = 0;
        int temp;
        int min;
        int minIndex;
        while(index < length)
        {
            temp = index;
            min = data[temp];
            for(;temp<length;temp++)
            {
                if(data[temp] < min)
                {
                    min = data[temp];
                    minIndex = temp;
                }
            }
            data[minIndex] = data[index];
            data[index] = min;
            index++;
        }
    }
    /*快速排序*/
    void QuickSort(int data[],int left,int right)
    {
        int i = left;
        int j = right;
        int base;
        if(left < right)
        {
            base = data[left];
            while(i != j)
            {
                while(j > i && data[j] > base)
                    j--;
                data[i] = data[j];
                while(i < j && data[i] < base)
                    i++;
                data[j] = data[i];
            }
            data[i] = base;
            QuickSort(data,left,i-1);
            QuickSort(data,i+1,right);
        }
    }
    /*希尔排序。在直接插入排序的基础上增加了一个增量。*/
    void ShellSort(int data[],int length)
    {
        int i;
        int j;
        int temp;
        int gap = length/2;
        while(gap > 0)
        {
            for(i = gap;i < length;i++)
            {
                temp = data[i];
                j = i - gap;
                while(j>=0 && data[j] > temp)
                {
                    data[j+gap] = data[j];//数据往后移动一位
                    j -= gap;
                }
                data[j+gap] = temp;
            }
            gap /= 2;
        }
    }
    /*归并排序*/ 
    void Merge(int data[],int low,int mid,int high)
    {
        int *temp;
        int i = low;
        int j = mid + 1;
        int k = 0;
        temp = (int *)malloc((high-low+1)*sizeof(int));
        while(i <= mid && j <= high)
        {
            if(data[i] <= data[j])
            {
                temp[k] = data[i];
                i++;
                k++;
            }
            else
            {
                temp[k] = data[j];
                j++;
                k++;
            }
        }
        while(i <= mid)
        {
            temp[k] = data[i];
            i++;
            k++;
        }
        while(j <= high)
        {
            temp[k] = data[j];
            j++;
            k++;
        }
        for(k = 0,i = low;i <= high;k++,i++)
        {
            data[i] = temp[k];
        }
    }
    void MergeSort(int data[],int low,int high)
    {
        int mid;
        if(low < high)
        {
            mid = (low + high)/2;
            MergeSort(data,low,mid);
            MergeSort(data,mid+1,high);
            Merge(data,low,mid,high);
        }
    }
    int main(void)
    {
        initData();
        printData("Initial Data:");
        MergeSort(data,0,ARRAYSIZE-1);
        printData("Afert Sort:");
        return 0;
    }
  • 相关阅读:
    python语法小应用---列表和元组
    初识numpy
    PageRank算法
    安装最新版的2016版Pycharm后,激活码
    Python中的一些小语法
    卷积神经网络Convolutional Neural Networks
    如何选取一个神经网络中的超参数hyper-parameters
    初识神经网络NeuralNetworks
    VMware环境和Window环境进行网络连接的问题
    C语言标准
  • 原文地址:https://www.cnblogs.com/chrischeng/p/3272915.html
Copyright © 2020-2023  润新知