C语言实现 冒泡排序 选择排序 希尔排序

巧了我就是萌 提交于 2019-11-27 19:25:55
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/timeb.h>

#define MAX 100000

long getSystemTime()
{
    struct timeb tb;
    ftime(&tb);
    return tb.time * 1000 + tb.millitm;
}

void Swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

void PrintArray(int arr[], int length)
{
    int i=0;
    for(i = 0; i < length; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}



// 冒泡排序
void BubbleSort(int arr[], int length)
{
    int i=0,j=0;
    for(i = 0; i < length; i++)
    {
        for(j = i + 1; j < length; j++)
        {
            if (arr[i] < arr[j])
            {
                Swap(&arr[i], &arr[j]);
            }
        }
    }
}

// 选择排序
void SelectSort(int arr[], int length)
{
    int i=0,j=0;
    int min = 0;
    for(i = 0; i < length; i++)
    {
        for(j = i + 1; j < length; j++)
        {
            if (arr[j] < arr[min])
            {
                min = j;
            }
        }
        if (min != i)
        {
            Swap(&arr[min], &arr[i]);
        }
    }
}

// 希尔排序
void ShellSort(int arr[], int length)
{
    int increasement = length;
    int i, j, k;

    do {
        //确定分组的增量
        increasement = increasement / 3 + 1;

        for(i = 0; i < increasement; i++)
        {
            for(j = i + increasement; j < length; j += increasement)
            {
                if(arr[j] < arr[j - increasement])
                {
                    int temp = arr[j];
                    for(k = j - increasement; k >= 0 && temp < arr[k]; k -= increasement)
                    {
                        arr[k + increasement] = arr[k];
                    }
                    arr[k + increasement] = temp;
                }
            }
        }
    } while (increasement > 1);
}

int main(void)
{

    int arr_bubble[MAX];
    int arr_select[MAX];
    int arr_shell[MAX];
    srand((unsigned int)time(NULL));
    int i=0;
    for(i = 0; i < MAX; i++)
    {
        arr_bubble[i] = rand() % MAX;
        arr_select[i] = rand() % MAX;
        arr_shell[i] = rand() % MAX;
    }


    //PrintArray(arr_bubble, MAX);
    long tbubble_start = getSystemTime();
    BubbleSort(arr_bubble, MAX);
    long tbubble_end = getSystemTime();
    //PrintArray(arr_bubble, MAX);
    printf("冒泡排序%d个数,所需时间:%d\n", MAX, tbubble_end - tbubble_start);
    printf("---------------------------------------\n");

    //PrintArray(arr_select, MAX);
    tbubble_start = getSystemTime();
    SelectSort(arr_select, MAX);
    tbubble_end = getSystemTime();
    //PrintArray(arr_select, MAX);
    printf("选择排序%d个数,所需时间:%d\n", MAX, tbubble_end - tbubble_start);
    printf("---------------------------------------\n");


    //PrintArray(arr_shell, MAX);
    tbubble_start = getSystemTime();
    ShellSort(arr_shell, MAX);
    tbubble_end = getSystemTime();
    //PrintArray(arr_shell, MAX);
    printf("希尔排序%d个数,所需时间:%d\n", MAX, tbubble_end - tbubble_start);


    return 0;
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!