关于数组排列统计排序的问题? 数组的排序算法

1256℃ PATTY

关于数组排列统计排序的问题?数组的排序算法

关于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]如果前者大,则交换两者位置,如果前者小则不交换。这个程序是逐步比较交换排序,最终是将某组数按顺序排列。