C数据结构-几种常见的排序:冒泡,选择,插入,希尔

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/water_3700348/article/details/78222592

几种常见的排序

实际开发中,我们最常见到最常使用的排序莫过于:冒泡排序、选择排序、插入排序和希尔排序。希尔排序其实就是一种特殊的插入排序。

#ifndef ALGORITHM_H
#define ALGORITHM_H

#define ARRAR_SIZEOF(a) ( sizeof((a)) / sizeof((a[0])) )

/**
 * 直接选择排序
 * @param arr 数组指针
 * @param size 数组大小
 */
void select_sort(int arr[], int size)
{
    int i,j,min,tmp;

    for(i = 0; (i < size -1) && flag; i ++)
    {
        min = i;
       
        for(j = i + 1; j < size; j++)
        {
            if(arr[min] > arr[j])
            {
                min = j;
               
            }
        }
        /* 当最小值的下标min与i不相等时才需要交换位置,否则i位置就是最小的 */
        if( i != min)
        {
            tmp = arr[min];
            arr[min] = arr[i];
            arr[i] = tmp;
        }

    }

}

/**
 * 冒泡排序
 * @param arr 数组指针
 * @param size 数组大小
 */
void bubble_sort(int arr[], int size)
{
    int i,j,tmp,flag = 1;

    for(i = 0; (i < size - 1) && flag; i++ )
    {
        flag = 0;
        for(j = 0;j < size - 1 - i; j++)
        {
            if(arr[j] > arr[j + 1])
            {
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
                flag = 1;
            }
        }
    }
}

/**
 * 直接插入排序
 * @param arr
 * @param size
 */
void insert_sort(int arr[], int size)
{
    int i,j,tmp;

    for(i = 1; i < size; i++)
    {
        tmp = arr[i];
        for(j = i - 1;j >= 0;j--)
        {
            if(tmp > arr[j])
                break;
            arr[j + 1] = arr[j];

        }
        arr[j + 1] = tmp;
    }
}

/**
 * 希尔排序
 * @param arr
 * @param size
 */
void shell_sort(int arr[], int size)
{
    int i,j,tmp,gap = size;


    do
    {
        gap = gap / 3 + 1;

        for(i = gap; i < size; i += gap)
        {
            tmp = arr[i];
            for(j = i - gap;j >= 0;j -= gap)
            {
                if(tmp > arr[j])
                    break;
                arr[j + gap] = arr[j];

            }
            arr[j + gap] = tmp;
        }
    }
    while(gap > 1);
}



#endif // ALGORITHM





猜你喜欢

转载自blog.csdn.net/water_3700348/article/details/78222592