C语言数组排序方法
发布网友
发布时间:2022-04-23 04:58
我来回答
共13个回答
热心网友
时间:2022-05-22 02:49
选择排序的原理是,每次从待排序数字中挑选出最大(最小)数字,放在有序序列的末尾。实际操作中,只需要在这个数组中将挑出来的数字与前面的数字交换即可。例如:4
1 5
2 3找到最小的1,1和4交换1
4 5
2
3找到最小的2,2和4交换1
2
5
4
3找到最小的3,3和5交换1
2
3
4
5找到最小的4,4和4交换(不交换也可)可见,选择排序需要一个双重循环来完成,因此它的复杂度是O(n^2)在数据量比较大时,不建议使用这种排序方法。 其他排序方法有很多,你甚至可以自己根据不同数据规模设计不同的排序方法。比较常见的有冒泡排序,插入排序(这两种和选择排序一样,都是O(n^2)),二分法插入排序(降低了一些复杂度,但是涉及到大规模数据移动,效率依然不高),快速排序(平均复杂度O(nlogn),但是不稳定,最坏情况O(n^2)),随机化快速排序(很大程度上避免了最坏情况的出现),堆排序(O(nlogn),编程复杂度高),基数排序(理论复杂度O(n),实际要比这个慢。甚至能应付字符串排序,但是编程复杂度高,牵扯到其他数据结构),桶排序(O(n),编程简单,效率高,但是应付的数据范围不能太大,受到内存大小的*)。 平时比较常用的就是快速排序,程序简单,效率也可以接受。 这是我了解的一些东西,希望对你有帮助。
热心网友
时间:2022-05-22 04:07
很简单啊,说白了就是找“最大值”和“最小值”,然后分别zd用变量存起来,再进行专数组元素的移位即可。当然数据结构用“链表”也可以,但都差不多......................还不属如自己写一个可变长数组。
热心网友
时间:2022-05-22 05:42
/*
写好了,冒泡排序
然后用变量定义数组
很好理解,你看看吧
如果有啥问题追问一下
哇,写完了
我飘~
*/
#include
#include
int
main(void)
{
long
box=0l;
int
n=0,
i1=0,
i2=0;
printf("输入数组元素个数:4");
scanf("%d",&n);
long
array[n];
for(i1=0;i1
",i1+1);
scanf("%d",&array[i1]);
}
for(i1=0;i1
0;i1--,i2++)
printf("%3d>%d\n",i2,array[i1]);
getch();
return
0;
}
热心网友
时间:2022-05-22 07:33
这是倒序,不是排序。e68a847a686964616f31333330343236
下面代码运行结果:
输入n:
6
输入6个数:
12
15
29
38
220
44
倒序后:
44
220
38
29
15
12
#include
<stdio.h>
#define
N
256
void
inverse(int
*in,
int
*out,
int
n)
{
int
i;
for(i
=
0;
i
<
n;
i
++){
out[i]
=
in[n-1-i];
}
}
int
main()
{
int
in[N];
int
out[N];
int
n
=
0;
int
i
=
0;
printf("输入n:
");
scanf("%d",
&n);
if(n
>
N)
n
=
N;
printf("输入%d个数:
",
n);
for(i
=
0;
i
<
n;
i
++){
if(scanf("%d",
in+i)!=1)
break;
}
n
=
i;
inverse(in,
out,
n);
printf("倒序后:
");
for(i
=
0;
i
<
n;
i
++){
printf("%d
",
out[i]);
}
printf("\n");
return
0;
}
热心网友
时间:2022-05-22 09:41
冒泡排序,大数像一个气泡一样,一次次往高的地方走。最后的结果是从小到大的排列
热心网友
时间:2022-05-22 12:06
像是选择法排序,但不太简练!
正确的选择法为:
#include <stdio.h>
void main(void)
{
int a[9]={3,42,55,546,43,323,54,121,32},i,j,l,temp;
for(i=0;i<9;i++)
for(j=i+1;j<8;j++)
if(a[i]<a[j])
{temp=a[i];
a[i]=a[j];
a[j]=temp;}
for(l=0;l<9;l++)
printf("%d\n",a[l]);
}
正确的冒泡法为:
#include <stdio.h>
void main(void)
{
int a[9]={3,42,55,546,43,323,54,121,32},i,j,l,temp;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]>a[j+1])
{temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;}
for(l=0;l<9;l++)
printf("%d\n",a[l]);
}
热心网友
时间:2022-05-22 14:47
本来看着应该是像冒泡法,但好像又有点小bug。
for(i=0;i<9;i++)
for(j=i;j<9;j++)//思想是先找当前最大的数。第一次要比较9次,第二次8次,第三次7次.......
热心网友
时间:2022-05-22 17:45
冒泡排序法
for(i=0;i<9-1;i++)//排八次就可以了
for(j=0;j<9-i;j++)//外循环执行一次,内循环相应操作的数字少一个
热心网友
时间:2022-05-22 21:00
1.选择排序思想:
假定
按从大到小排序,比较
数组
中所有数的
大小
,挑出最大的
元素
将其与第一个元素交换位置,然后比较除第一个元素外其他各元素的大小,挑出最大的元素与第二个元素交换位置,依此类推,完成排序。
2.给你解释开头的n-2:k=0
to
k=n-2,k总共取n-1个元素,当k=n-2时,对应a[n-2]为数组倒数第二个元素,此时i=n-i,a[i]即a[n-1]对应数组最后一个元素,当比较完a[n-2]和a[n-1]并排序后,整个数组就完成了排列。
3.
代码
:
for(k=0;k<=n-2;k++)
{
index=k;
for(i=k+1;i<=n-1;i++)
{
if(a[i]<a[index])
{
index=i;
}
}
temp=a[k],a[k]=a[index],a[index]=temp;
}
热心网友
时间:2022-05-23 00:31
冒泡法,英文叫BubbleSort
热心网友
时间:2022-05-23 04:19
冒泡排序:
#include
<stdio.h>
#define
N
7
void
main()
{
char
ch[7];
for(i=0;i<N;i++)
{
scanf("%c",
热心网友
时间:2022-05-23 12:45
冒泡排序:
#include
<stdio.h>
#define
N
7
void
main()
{
char
ch[7];
for(i=0;i<N;i++)
{
scanf("%c",
热心网友
时间:2022-05-23 22:18
是冒泡排序吧