C 排序

2020-03-26  本文已影响0人  恍然如梦_b700
#include <stdio.h>


#define ARR_LEN 255 /*数组长度上限*/
#define elemType int /*元素类型*/
 
/* 冒泡排序 */
/* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
/* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void bubbleSort (int arr[], int len) {
    int temp;
    int i, j;
    for (i=0; i<len-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
        for (j=0; j<len-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
            if (arr[j] > arr[j+1]) { /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
}

void bubbleSort1(int *arr, int len)
{
    int temp;
    
    for (int i = 0; i<len-1; i++) { //比较n-1趟
        int flag = 0;//提前退出冒泡排序的标志位
        for (int j = 0; j<len-1-i; j++) { //每次做 leng-1 - i次比较
            if (arr[j] > arr[j+1]) {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                flag = 1;
            }
        }
        if (!flag) break;
    }
}

//插入排序

void insert_sort(int *array,unsigned int n)
{
    int i,j;
    int temp;
    for(i=1;i<n;i++)
    {
        temp=array[i];
        j=i-1;
        //与“已排序”!的数逐一比较,大于temp时,该数移后
        while((j>=0)&&(array[j]>temp))
        {
            array[j+1]=array[j];
            j--;
        }
        //存在大于temp的数
        if(j!=i-1)
            array[j+1]=temp;
    }
}

void insertSort(int *array,int n)
{
    int i,j;
    int temp;
    for(i=1;i<n;i++)
    {
        temp=*(array+i);
        for(j=i;j>0&&*(array+j-1)>temp;j--)
        {
            *(array+j)=*(array+j-1);
        }
        *(array+j)=temp;
    }
}

void insertSort1(int *array,int n)
{
    int i,j;
    int temp;//临时变量
    for (i = 1; i<n; i++) {
        temp = array[i];
//        temp=*(array+i);//
        /*
         比如有char array[10];那么array就是数组首地址,即&array[0];
         也就是说array是一个指针,指向array[0];
         那么array + i,等于&array[i];
         那么*(array + i) 等于array[i];
         */
        j = i - 1;
        for (; j>=0; j--) { /* 从后向前比较 */
            if (array[j] > temp) //x前面的数比它大
                array[j+1] = array[j];  /* 将大数向后移动*/
             else break; /* 找到插入的位置,退出 */
        
        }
        
        //与“已排序”!的数逐一比较,大于temp时,该数移后
//        while((j>=0)&&(array[j]>temp))
//        {
//            array[j+1]=array[j];
//            j--;
//        }
        //存在大于temp的数
        if(j!=i-1)
            array[j+1]=temp;
    }
    
}

//选择排序
void select_sort(int list[], int n)
{
    int i, j, min, temp = 0;
    for (i = 0; i < n - 1; i++){
        min = i;//查找最小值
        for (j = i + 1; j < n; j++)
            if (list[j] < list[min])
                min = j;//记录最小值下标
        if (min != i) {
            temp = list[min];
            list[min] = list[i];
            list[i] = temp;
        }
    }
}
//归并排序

//快速排序


int main(int argc, const char * argv[]) {
   
    int a[10] = {1,13,6,5,7};
//    bubbleSort1(a, 3);
    insertSort(a,5);
//    printf("%d",a[0]);
    for (int i = 0; i<10; i++) {
        printf("%d\n",*(a+i));
    }
    
    return 0;
    
}

上一篇下一篇

猜你喜欢

热点阅读