开发者社区> 问答> 正文

用C语言编写函数,要实现快速排序算法或者冒泡法

用C语言编写函数,要实现快速排序算法或者冒泡法

展开
收起
知与谁同 2018-07-15 17:55:02 2129 0
3 条回答
写回答
取消 提交回答
  • 冒泡很简单,两个for循环嵌套就行了
    void bubble(vector<int> &put)// put容器内放入要排序的数据即可
    {
    int temp;
    temp=put[0];
    for(int i=1;i!=put.size();i++)
    for(int j=0;j<i;j++)
    if(put[j]>put[i])
    {
    temp=put[i];
    put[i]=put[j];
    put[j]=temp;
    }
    }
    2019-07-17 22:50:56
    赞同 展开评论 打赏
  • 快排:
    #include <stdio.h>

    int qsort(int* a,int low,int high)
    {
    int temp = a[low];
    while(low<high)
    {
    while(low < high && temp < a[high])
    --high;
    a[low] = a[high];

    while(low < high && temp > a[low])
    ++low;
    a[high] = a[low];
    }
    a[low] = temp;

    return low;
    }

    void sort(int* a,int low,int high)
    {
    int temp;
    if(low<high)
    {
    temp = qsort(a,low,high);
    qsort(a,low,temp-1);
    qsort(a,temp+1,high);
    }
    }

    int main()
    {
    int list[] = {4,5,6,3,7,1};

    sort(list,0,5);

    char i;
    for(i=0;i<6;i++)
    printf("%3d",list[i]);
    printf("\n");

    return 0;
    }
    冒泡:
    void sort(int *a,int len)//参数1,表示数组,参数2表示数组长度
    {
    int i,j,t;

    for(i=0;i<len-1;i++)
    {
    for(j=0;j<len-1-i;j++)
    {
    if(a[j]<a[j+1])
    {
    t = a[j];
    a[j] = a [j+1];
    a[j+1] = t;
    }
    }
    }
    }
    都是自己平时写的,全部可以调试通过,快排要是看不懂加我Q,285296372~
    2019-07-17 22:50:56
    赞同 展开评论 打赏
  • 冒泡法排序函数如下:
    void bubble(int a[],int n)
    {int i,j,t;
    for(i=0;i<n-1;i++)/*共进行n-1轮*/
    for(j=0;j<n-1-i;j++)/*每轮在前n-i个数中比较*/
    if(a[j]>a[j+1]) /*若相邻元素逆序*/
    {t=a[j]; a[j]=a[j+1];a[j+1]=t;}/*就交换*/
    }

    void sort(int *a, int left, int right)
    {
    if(left >= right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/
    {
    return ;
    }
    int i = left;
    int j = right;
    int key = a[left];
    while(i < j) /*控制在当组内寻找一遍*/
    {
    while(i < j && key <= a[j])
    /*而寻找结束的条件就是,1,找到一个小于或者大于key的数(大于或小于取决于你想升
    序还是降序)2,没有符合条件1的,并且i与j的大小没有反转*/
    {
    j--;/*向前寻找*/
    }
    a[i] = a[j];
    /*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是
    a[left],那么就是给key)*/
    while(i < j && key >= a[i])
    /*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反,
    因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/
    {
    i++;
    }
    a[j] = a[i];
    }
    a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/
    sort(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/
    sort(a, i + 1, right);/*用同样的方式对分出来的右边的小组进行同上的做法*/
    /*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/
    }
    2019-07-17 22:50:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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