VB FOR循环及排序

VB FOR循环及排序,第1张

冒泡排序法

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将小数放前,大数放后,一直比较到最小数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。如此下去,直至最终完成排序。

For i = 1 To 3 用于比较的第一个数在数组中的顺序(每一个都要比较)

For j = i To 2 用于比较的第二个数在数组中的顺序(同样除了自已外每一个都要比较,不过前面的比较了就不用重复比较了)

If x(i) < x(j + 1) Then 假如第1个小于第2个数时

t = x(i)

x(i) = x(j + 1)

x(j + 1) = t 经典交换程序段,这段是用临时变量t存储要交换的两个数中的一个,然后交换两者,看多一点程序就会理解的,因为很常用

End If

Next j

Next i

用选择排序法编写c语言,实现从键盘上输入10个数,按从大到小的顺序排序输出。代码如下:

#include<stdioh>

int main()

{

int i,j,a[10],t;

printf("输入数");

for (i = 0; i < 10; i++)

scanf("%d",&a[i]);

for (i = 0; i < 10; i++)

{

for (j = i + 1; j < 10;j++)

if (a[i] < a[j]){

t = a[i];

a[i] = a[j];

a[j] = t;

}

}

printf("从大到小");

for (i = 0; i < 10; i++)

printf("%2d", a[i]);

return 0;

}

扩展资料:

代码还可以设计,如下:

#include<stdioh>

int main()

{

int a[10],i,j,t;//定义数组;

for(i=0;i<10;i++){

scanf("%d",&a[i]);//给数组赋值;

}

for(i=0;i<9;i++)//10个数,进行9轮比较;

for(j=0;j<10-i;j++){//第一个数比较9次,依次递减;

if(a[j]>a[j+1]) {//交换值;

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

for(i=0;i<10;i++){

printf("%d\n",a[i]);//输出数组的值;

}

return 0;

}

}

printf("the sorted numbers:\n");

for(i=0;i<10;i++)

printf(" %d",a[i]);

printf("\n");

}

参考资料:

百度百科-printf

#include "stdioh"

#define N 10

int main(int argc,char argv[]){

int a[N],i,j,k;

printf("Please enter %d integer(s)\n",N);

for(i=0;i<N;scanf("%d",a+i++));//输入

for(i=0;i<N;i++){//选择法排序

for(k=i,j=k+1;j<N;j++)

if(a[k]>a[j])

k=j;

if(k!=i)

j=a[k],a[k]=a[i],a[i]=j;

printf("%d ",a[i]);

}

printf("\n");

return 0;

}

代码和运行样例:

就是全部代码都写进main函数呗?

#include <stdioh>

#include <conioh>

 

#define LEN 100 /数组长度上限/

#define elemType int /元素类型/

int main (void) {

    elemType arr[LEN];

    int len;

    elemType temp;

    int i, j;

    

    printf ("请输入数组元素个数:");

    scanf ("%d",&len); 

     

    printf ("请输入包含%d个元素的数组:\n",len);

    for (i=0; i<len; i++)

        scanf ("%d",&arr[i]);

    putchar ('\n');

     

    puts ("排序后数组:");

    /升序冒泡排序/

    for (i=0; i<len-1; i++)

        for (j=0;j<len-1-i; j++) {

            if (arr[j] > arr[j+1]) {

                temp = arr[j];

                arr[j] = arr[j+1];

                arr[j+1] = temp;

            }

        }

    for (i=0; i<len; i++)

        printf ("%d\t",arr[i]);

    putchar ('\n');

     

    getch (); /屏幕暂留/

    free (arr);

    return 0;

}

运行结果

void sort(int a[100])

{

int iA =0;

for(int i =0 ;i<100;i++)

{

for(int j =0;j<100 - i;j++)

if(a[i]>a[j])

{

iA =a[j];

a[j] = a[i];

a[i] = iA;

}

}

}

void sort(char a[26])

{

char cA;

for(int i =0 ;i<100;i++)

{

for(int j =0;j<100 - i;j++)

if(a[i]>a[j])

{

cA =a[j];

a[j] = a[i];

a[i] = cA;

}

}

}

void float(float[100])

{

float fA =0;

for(int i =0 ;i<100;i++)

{

for(int j =0;j<100 - i;j++)

if(a[i]>a[j])

{

iA =a[j];

a[j] = a[i];

a[i] = iA;

}

}

}

你给的排序程序有问题,我先帮你改好了(改动的地方见注释),然后根据改正后的程序给你解释排序原理

int i ,j;

person temp;//这里preson temp后面加分号,并且preson拼错了应该是person

for(i=0;i<n-1;i++) //这里for(i=1;i<n;i++)改成for(i=0;i<n-1;i++)

{

 for(j=0;j<n-1-i;j++)//这里for(j=0;j<=n-1-i;j++)改成for(j=0;j<n-1-i;j++)

  if(all[j]salary>all[j+1]salary)//这里if(all[i]salary>all[j+1]salary)改成if(all[j]salary>all[j+1]salary)

  {

   temp=all[j];

   all[j]=all[j+1];

   all[j+1]=temp;

  }

}上面是把n个人的薪金按从小到大排序的程序,用的是冒泡排序算法,冒泡排序算法的原理是把一个无序的数组,

1两个相邻的数组元素比较,如果第一个比第二个大,就交换他们两个

2对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这样最后一个元素就是最大的数

3重复上述步骤,除了最后一个,

4持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

对于你的程序,第一个for-i循环是表示这个排序要循环多少次,也就是要走多少趟

第二个for-j循环表示每一趟要判断多少次

比如n=5时

当i=0时第一趟 第二个for-j循环为for(j=0;j<5-1-0;j++)表示从数组0和1到3和4要判断4次,最大的数放在all[4]salary中

当i=1时第二趟 第二个for-j循环为for(j=0;j<5-1-1;j++)表示从数组0和1到2和3要判断3次,次大的数放在all[3]salary中

当i=2时第三趟 第二个for-j循环为for(j=0;j<5-1-2;j++)表示从数组0和1到1和2要判断2次,第三大的数放在all[2]salary中

当i=3时第四趟 第二个for-j循环为for(j=0;j<5-1-3;j++)表示数组0和1要判断1次,次小的数放在all[1]salary中,最小的数放在all[0]salary中

因为i=4时for-j循环为for(j=0;j<5-1-4;j++)所以结束for-j循环

又因为i=4时for-i循环为for(i=0;i<5-1;i++)所以当i=4时跳出for-i循环结束排序

这样就得到从小到大排好序的数组了

最后一行 printf("%d ",a[i]); 后面应该有个“}”才对这个程序是对的,在a[11]这个数组里只有a[0]~a[9]这10个元素第一个for循环与第二个for循环构成嵌套,第一次循环结束找出a[0]~a[9]里最大的数,第二次结束找出a[1~a[9]]里最大的数,第三次找出a[2]~a[9]里最大的数,……这样依次类推,其实就是一个选择排序!程序中变量 p q 交替记录最大数的下标和最大数的值。这并不是一个难懂的程序,有一定基础的应该都能弄懂的。或者你回去看看有关选择排序的程序实例。这只是大致的内容,别的不需要多讲应该可以看明白的。

编写程序,从键盘输入两个双精度实数a和b,要求两个数按照升序排序,以下是用C++语言实现的代码段:

double a,b,t;

cin>>a>>b;

if(a>b){t=a; a=b; b=t;}

cout<<a<<" "<<b<<endl;

以上就是关于VB FOR循环及排序全部的内容,包括:VB FOR循环及排序、如何用c语言编写一个程序,实现按从大到小的顺序排序输出10个数、用c语言编程:键盘上输入N个整数,使该数组中的数按照从小到大的次序排列(选择法排序)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10219147.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存