StarHui


私信TA

用户名:uq_15565483691

访问量:3952

签 名:

只要你想,世界就会出现奇迹!

等  级
排  名 326
经  验 5423
参赛次数 2
文章发表 25
年  龄 18
在职情况 学生
学  校 西安汽车职业大学
专  业 人工智能

  自我简介:

大一新生一枚 一起学习交流,请加V:StarHui0415 个人公众号:阿辉的大本营 公众号会每天更新一道算法题!!!

TA的其他文章

解题思路:

                这个题看似简单,是用排序算法做的。还是有一点点坑的,当然我入坑了。我刚开始用的快速排序法,写的排序部分,结果运行结果是内存超限,现在我还没搞懂为什么,等我弄懂了会在下面更新的,要保持关注啊!已经找到了错误,原来是调用函数来递归排序那一步出错了,一不小心把它写while循环里面了

                冒泡排序法思路:冒泡排序是最简单的排序算法之一,就是比较前后两个数,如果前面的数大于后面的数就交换,反之不变。通过不断遍历来完成此操作,相比于快速排序法来说运行时间有点慢。

注意事项:

                冒泡排序的循环条件不要写错了,第一层循环写到len - 1就可以了,因为到遍历到倒数第二个数就能与最后一个进行比较了。而第二层循环写成len-1-i是因为,经过第一次循环,最后几个数已经排好序了。(有什么错误的,欢迎指点)

参考代码:

冒泡排序法:

#include void bubble_sort(int nums[],int len)
{
    int i,j,temp;
    for(i = 0;i < len - 1;i++)//不能遍历到最后一个元素,不然会越界
    {
        for(j = 0;j < len - 1 - i;j++)//遍历到这即可,因为最后几个数已经排好序了
        {
            if(nums[j] > nums[j + 1])//如果前面的数大于后面的数,就互换
            {
                temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    int i,nums[100];
    for(i = 0;i < n;i++)
    {
        scanf("%d",&nums[i]);
    }
    bubble_sort(nums,n);//这里传入数组和数组长度
    for(i = 0;i < 3;i++)
    {
        printf("%d ",nums[i]);
    }
    return 0;
}

快速排序法

#include <stdio.h>
void quick_sort(int nums[],int l,int r)
{
    if(l >= r)
        return;
    int i = l - 1,j = r + 1,x = nums[(l + r) / 2];
    while(i < j)
    {
        do i++;while(nums[i] < x);
        do j--;while(nums[j] > x);
        if(i < j)
        {
            int t = nums[i];
            nums[i] = nums[j];
            nums[j] = t;
        }
    }
    quick_sort(nums,l,j);
    quick_sort(nums,j + 1,r);
}
int main()
{
    int n;
    scanf("%d",&n);
    int i,nums[120];
    for(i = 0;i < n;i++)
    {
        scanf("%d",&nums[i]);
    }
    quick_sort(nums,0,n - 1);//快速排序法
    for(i = 0;i < 3;i++)
    {
        printf("%d ",nums[i]);
    }
    return 0;
}

C++代码

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int n,nums[110];
    cin >> n;
    for(int i = 0;i < n;i++)
        cin >> nums[i];
    sort(nums,nums + n);
    for(int i = 0;i < 3;i++)
        cout << nums[i] << " ";
    cout << endl;
    return 0;
}


 

0.0分

2 人评分

  评论区

后续弄懂了快速排序法内存超限的问题后,我会进行更新的。请感兴趣的保持关注,谢谢
2022-11-03 17:05:56
  • «
  • 1
  • »