关于数组排列统计排序的问题? 数组的排序算法
关于C语言一维数组排序问题
冒泡排序法:
#include<stdio.h>
void main()
{ int a[5]={5,4,3,2,9},i,k,temp;
for(k=0;k<5;k++)
{for(i=k+1;i<5;i++)
if(a[k]<a[i])
{temp=a[k];
a[k]=a[i];
a[i]=temp;
}
printf(" %d",a[k]);
}
getch();
}
以下是各种基本排序的算法,有时间可以看看
选择排序:
#include "stdio.h"
#define N 5
main()
{
int i,j,k,t;
int a[N];
printf("请输入五位数:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++)
{
k=i;
for(j=i+1;j<N;j++)
if(a[k]>a[j]) k=j;
if(i!=k)
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
for(i=0;i<N;i++)
printf("%d\t",a[i]);
printf("\n");
}
插入排序法:
#include "stdio.h"
#define N 5
main()
{
int i,j,k;
int a[N];
printf("请输入五位数:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N;i++)
{
k=a[i];
j=i-1;
while(j>=0&&k<a[j])
{
a[j+1]=a[j];
j--;
}
a[j+1]=k;
}
for(i=0;i<N;i++)
printf("%d\t",a[i]);
printf("\n");
}
shell排序法:
#include "stdio.h"
#define N 10
main()
{
int i,j,k,m,flag;
int a[N]={10,33,23,45,12,67,44,22,33,18};
m=N;
while(m>1)
{
m=(m+1)/2;
do
{
flag=0;
for(i=0;i<N-m;i++)
{
j=i+m;
if(a[i]>a[j])
{
k=a[i];a[i]=a[j];a[j]=k;flag=1;
}
}
}while(flag);
}
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
}
如果对你有所帮助,请记得采纳最佳答案,谢谢!
关于数组快速排序的问题
快速排序运用了分治的策略
首先任取数据a[x]作为基点(基点是任意的,(left+right)/2与第一个元素其实是一样的,当然你也可以选最后一个元素作基点)。比较a[x]与其它数据并排序,使a[x]排在数据的第k位,并且使a[1]~a[k-1]中的每一个数据<a[x],a[k+1]~a[n]中的每一个数据>a[x],这就完成了一次分治,然后采用递归的方法分别对a[1]~a[k-1]和a[k+1]~a[n]两组数据进行快速排序。
你测试程序用的数据是怎样的?
最好有随机数生成器生成一组比较多的数据
C语言数组排序问题?
#include "stdio.h"
int main(void)
{
int i,j,p,q,s,a[10];
printf("input 10 number:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);//输入10个要排序的数
//下面是一个选择排序的过程
for(i=0;i<10;i++)
{
p=i;q=a[i];
for(j=i+1;j<10;j++) //找出a[i]到a[9]之间的最大数
if(q<a[j])
{
p=j;
q=a[j];
}
if(i!=p)//如果最大数就是a[i]那么就不用交换位置,如果不是a[i]那么就将最大数放在a[i],注意这个不在循环之内
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
选择排序就是每次选择出最大的或者最小的数放在第一位,然后再剩下的数里面再选最大数排在第一位
以本题为例,首先选取最大的数放在a[0],然后再a【1】到a【9】中选取最大数放在a【1】,以此类推、
C语言数组排列问题
你这里定义和程序不完整啊!这段程序排序问题,for(i=1;i<n;i++)表示i从1开始,到n-1. 条件成立,则每执行一次for(j=0;……)就是从这开始到该程序结束)那么i就加1并进行判断进入下一次执行 for(j=0;……)。而for(j=0;j<n=i;i++).表示在j小于当前i的情况下,例如当前的i=2,则j小于2,为0,1。)执行下面交换语句(if语句),if语句是判断b[j]和b[j+1]如果前者大,则交换两者位置,如果前者小则不交换。这个程序是逐步比较交换排序,最终是将某组数按顺序排列。