开发者社区> 问答> 正文

排序算法c语言n个数字的排序

排序算法c语言n个数字的排序

展开
收起
知与谁同 2018-07-18 15:45:50 2514 0
2 条回答
写回答
取消 提交回答
  • Nothing for nothing.
    我近期做练习的时候专门为排序做了一个c程序,你看看怎么样,包括了很多排序方法
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #define LEN 10
    //初始化数组
    void init(int *arr,int len);
    //打印数组元素
    void print(int *arr,int len);
    //打印堆元素
    void printH(int *arr,int len);
    //交换两个整数的值
    void swap(int &a,int &b);
    //简单插入排序
    void inserts(int *arr,int len);
    //冒泡排序
    void bubbles1(int *arr,int len);
    //简单选择排序
    void selects(int *arr,int len);
    //快速排序
    void quicks(int *arr,int low,int high);
    //希尔排序
    void shells(int *arr,int len);
    //归并
    void merge(int *a,int len1,int *b,int len2,int *c);
    int main()
    {
    int arr[LEN],brr[LEN],crr[2*LEN];
    srand((unsigned)time(NULL));
    init(arr,LEN);
    print(arr,LEN);
    bubbles1(arr,LEN);
    print(arr,LEN);
    init(arr,LEN);
    print(arr,LEN);
    selects(arr,LEN);
    print(arr,LEN);
    init(arr,LEN);
    print(arr,LEN);
    inserts(arr,LEN);
    print(arr,LEN);
    init(arr,LEN);
    print(arr,LEN);
    quicks(arr,0,LEN);
    print(arr,LEN);
    init(arr,LEN);
    init(brr,LEN);
    print(arr,LEN);
    print(brr,LEN);
    shells(arr,LEN);
    shells(brr,LEN);
    merge(arr,LEN,brr,LEN,crr);
    print(crr,2*LEN);
    return 0;
    }
    //初始化数组
    void init(int *arr,int len)
    {
    int i;
    for(i=0;i<len;i++)
    {
    arr[i]=rand()%1000;
    }
    }
    //打印数组元素
    void print(int *arr,int len)
    {
    int i;
    printf("\n");
    for(i=0;i<len;i++)
    printf("%4d ",arr[i]);
    printf("\n");
    }
    //打印堆元素
    void printH(int *arr,int len)
    {
    int i;
    printf("\n");
    for(i=0;i<len;i++)
    printf("%4d ",arr[i]);
    printf("\n");
    }
    //交换两个整数的值,^功能为异或,相同0,相异1
    void swap(int &a,int &b)
    {
    a=a^b;
    b=a^b;
    a=a^b;
    }
    //插入排序
    void inserts(int *arr,int len)
    {
    int i,j,temp;
    for(i=1;i<len;i++)
    {
    temp=arr[i];
    for(j=i-1;j>=0&&arr[j]>temp;j--)
    arr[j+1]=arr[j];
    arr[j+1]=temp;
    }
    }
    //冒泡排序
    void bubbles1(int *arr,int len)
    {
    int i,j,exchange;
    exchange=0;
    for(i=0;i<len-1;i++)
    {
    for(j=0;j<len-i-1;j++)
    {
    if(arr[j]>arr[j+1])
    {
    swap(arr[j],arr[j+1]);
    exchange=1;
    }
    }
    if(!exchange)
    break;
    }
    }
    //简单选择排序
    void selects(int *arr,int len)
    {
    int i,j,temp;
    for(i=0;i<len-1;i++)
    {
    temp=i;
    for(j=i+1;j<len;j++)
    {
    if(arr[j]<arr[temp])
    {
    temp=j;
    }
    }
    if(temp!=i)
    {
    swap(arr[temp],arr[i]);
    }
    }
    }
    //快速排序
    void quicks(int *arr,int low,int high)
    {
    int temp,l,r;
    if(low<high)
    {
    l=low;
    r=high;
    temp=arr[low];
    while(low<high)
    {
    while(low<high&&arr[high]>=temp)
    high--;
    if(low<high)
    arr[low]=arr[high];
    while(low<high&&arr[low]<=temp)
    low++;
    if(low<high)
    arr[high]=arr[low];
    }
    arr[low]=temp;
    quicks(arr,l,low-1);
    quicks(arr,low+1,r);
    }
    }
    //希尔排序
    void shells(int *arr,int len)
    {
    int i,j,gap;
    for(gap=len/2;gap>0;gap/=2) //步长
    for(i=gap;i<len;i++)
    for(j=i-gap;j>=0&&arr[j]>arr[j+gap];j-=gap)
    swap(arr[j],arr[j+gap]);
    }
    //两有序数组合并
    void merge(int *a,int len1,int *b,int len2,int *c)
    {
    int i=0,j=0,k=0;
    while(i<len1&&j<len2)
    {
    if(a[i]<=b[j])
    {
    c[k]=a[i];
    k++;
    i++;
    }
    else
    {
    c[k]=b[j];
    k++;
    j++;
    }
    }
    if(i<len1)
    c[k++]=a[i++];
    else if(j<len2)
    c[k++]=b[j++];
    }
    2019-07-17 22:49:29
    赞同 展开评论 打赏
  • 杀人者,打虎武松也。
    #include <stdio.h>
    void sort(int *a,int len)
    {int i=0,j,t;
    for(i=0;i<len-1;i++)
    for(j=0;j<len-i-1;j++)
    if(a[j]>a[j+1])
    {
    t=a[j];
    a[j]=a[j+1];
    a[j+1]=t;
    }
    }
    int main()
    {int i,n,a[100];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    sort(a,n);
    for(i=0;i<n;i++)
    printf("%d ",a[i]);
    return 0;
    }
    2019-07-17 22:49:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载