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

来源:互联网 发布:史丹利的寓言 mac下载 编辑:程序博客网 时间:2024/06/05 19:03

几种常见的排序

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

#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




阅读全文
0 0