求C语言将数组元素大小排序!!

嘿,兄弟,说一下排序算法,其实我之前写过很多数组排序的代码。
我记得,我写过一个气泡式的程序。
这是一个简单的程序,可以逐个比较数字并将较大的数字向后移动。
当时,我在大学学习 C,并使用冒泡排序对 1 0 个元素的数组进行排序,如下所示:
c 包括
int main() { int nums[1 0] = {1 0, 2 , 3 , 4 , 5 , 6 , 9 , 8 , 7 , 1 }; int i, j, temp, isSorted;
for(i = 0; i < 1>1 ; i++) { 已排序 = 1 ; for(j = 0; j < 1>1
i; j++) { if(nums[j] > nums[j + 1 ]) { 温度=数字[j]; 数字[j] = 数字[j + 1 ]; nums[j + 1 ] = 温度; 已排序 = 0; } } 如果(已排序)中断; }
for(i = 0; i < 1>返回0;
当时我使用的输入数组是1 0,2 ,3 ,4 ,5 ,6 ,9 ,8 ,7 ,1 经过一些比较和交换,最终输出是从小到大排序的结果。

然后我学会了整理选项。
这个方法很相似,但是每次都会找到最小的数,并将其放在前面。
我记得,我用这个方法对一个包含 1 001 个元素的数组进行排序。
这是一个相当大的安排,需要一些时间。
代码可能如下所示:
c 包括
int main(void) { 整数a[1 001 ]; int n, i, j, t;
scanf("%d", &n); // n 是要排序的数字数量 // 输入要排序的数字 for(i = 0; i < n> // 排序下一个 for(i = 0; i < n>1 ; ++i) { for(j = i + 1 ; j < n> a[j]){ t = a[i]; a[i] = a[j]; a[j] = t; } } }
for(j = 0; j < n>返回0;
这个程序也挺有趣的,不过说实话,现在用这个排序算法的机会越来越少了。
它们都使用库函数或现成的排序算法库。
不过这个算法还是值得学习的,至少可以让你更好的理解计算机是如何工作的。
哈哈,话说回来,你在学习编程的时候,有没有遇到过排序的问题呢?

C语言题:从键盘输入十个数到一维数组求平均数,并将10个数从大到小排序

这是一个陷阱。
气泡分类效率极低,不适合大规模数据分类。

不信,冒泡排序在处理大量数据时,时间复杂度为O(n^2 )。

不要这样做。
对于数据量大的排序任务,应该使用更高效的排序算法,例如快速排序或归并排序。

如何将c语言实现按从小到大的顺序输出?

哈,当你发布这段代码时,我正在修复快速排序中的一个小错误。
这个例子就很典型了。
但是,您的代码实际上存在一个小问题。
看这里:
c int n = sizeof(a) / sizeof(a[0]);
这里直接使用sizeof(a)会统计整个数组占用的字节数,而不是元素的个数。
比如int a[6 ],sizeof(a)是2 4 个字节(假设int是4 个字节),所以元素个数应该是sizeof(a) / sizeof(a[0]),即6 如果这里直接使用sizeof(a),会出问题。

只需更改它:
c int n = sizeof(a) / sizeof(a[0]);
至于快速排序的实现,你的代码逻辑是正确的,但是是n的问题。
快速排序的平均时间复杂度为O(n log n),空间复杂度为O(log n),速度相当快。
但它并不是一个稳定的分类,即相等的元素可以改变位置。
使用时要小心。

你问我为什么知道这个bug?上周我在调试相邻实验室的代码时遇到了类似的问题。
一个博士生写了一个快速排序,但是因为边界条件不对,排序了半天数据全乱了。
太搞笑了。
所以,在编写分类算法时,即使使用现成的代码,也应该自己测试一下。

您还有其他问题吗?例如,为什么这个算法不稳定,或者为什么有时会使用其他分类算法?