delphi 编写排序程序

delphi 编写排序程序,第1张

气泡法

var

i,j,k,temp:integer;

begin

for i:=1 to 总个数 do

begin

for j:=i+1 to 总个数 do

begin

if aa[j]>aa[j+1] then

begin

temp:=aa[j];

aa[j]:=aa[j+1];

aa[j+1]:=temp;

end;

end;

end;

k桶法,再想想

这是冒泡排序,每一次将最大的元素冒泡至数组尾端,

比如数组 4 3 5 2 1,

第一次冒泡 4 3 2 1 5, i=1,j=4;(b[4]是最后一个元素)

第二次就只需要排前4个 : 3 2 1 4 5

第三次前3个 :2 1 3 4 5

第四次前2个 :1 2 3 4 5------>完成;

for(i=1;i<=9;i++)

for(j=2;j<=11-i;j++)

就是这个意思 i代表排几次,j代表每次需要排多少个元素

MOV R5,#16

MOV R6,#40H

LONG:

MOV R4,#15;16个数比较15次

MOV A,30H;将30H里面的内容复给A

MOV R0,#31H;让其从31H开始自加到3FH

L:

SUBB A,@R0;31H里面的内容和30H里面的内容进行相减比较求C

JC XU;如果C=0则表示A里面的内容大于@R0里面的内容否则小于跳转XU

INC R0;R0加1到下一单元地址

DJNZ R4,L;15次比较没有结束跳转到L继续执行

AJMP LL;如果15次循环完毕则求出最大值,然后再循环求出次大值

XU:

MOV A,R0;放比较数的地址送A,以清零方便为第二次比较

MOV R1,A;方便清零

MOV A,@R0;最大值送A

INC R0

AJMP LL

LL:

MOV @R1,#00H;最大值地址清零,然后再比较15次求次大值

MOV R6,A;最大值送40H

INC R6

DJNZ R5,LONG;判断是否全部从大到小排完

AJMP TT

TT:

END

冒泡法!

#include<stdioh>

int main()

{

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

printf("Input 10 numbers:\n");

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

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

printf("\n");

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

for(j=0;j<9-i;j++)

if(a[j]>a[j+1])

{ t=a[j];a[j]=a[j+1];a[j+1]=t; }

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

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

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

return 0;

}

选择排序法

#include<stdioh>

void main()

{

int a[11],i,j,k,x;

printf("Input 10 numbers:\n");

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

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

printf("\n");

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

{ k=i;

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

if(a[j]<a[k]) k=j;

if(i!=k)

{ x=a[i];a[i]=a[k];a[k]=x; }

}

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

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

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

}

#include "stdioh"

#include "stdlibh"

#define MAX_NUM 100

int main( int argc, char argv[] )

{

    int sort_list[MAX_NUM];

    int tmp_it = 0;

    int list_num = 0;

    int i, j, k, t;

    while ( 1 )

    {

        scanf( "%d", &tmp_it );

        if ( tmp_it < 0 || list_num >= MAX_NUM )

        {

            break;

        }

        sort_list[list_num++] = tmp_it;

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

        {

            k = i;

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

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

                {

                    k = j;

                }

            if ( k != i )

            {

                t = sort_list[ i ];

                sort_list[ i ] = sort_list[ k ];

                sort_list[ k ] = t;

            }

        }

        printf( "开始打印排序\n" );

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

        {

            printf( "%d\n", sort_list[i] );

        }

        printf( "打印排序结束\n" );

    }

    return 0;

}

晚上9点-11点 免疫系统(淋巴)排毒时间

此段时间应安静或听音乐,夫妻同房应排在此时,不应在11点之后,要不先睡一觉,天亮再来。

晚间11点-凌晨1点 肝的排毒时间

需要在熟睡中进行

凌晨1点-3点 胆的排毒时间

凌晨3点-5点 肺的排毒时间

此即为何咳嗽的人在这段时间咳得最剧烈,因排毒动作已走到肺经,不应用止咳药,以免抑制积物的排除。

凌晨5点-7点 大肠的排毒时间

应上厕所排便。

凌晨7点-9点 小肠大量吸收营养的时间

应吃早餐。

半夜至凌晨4点 脊椎造血时间

必须熟睡,不宜熬夜。

第二段:

For i = 1 To 4 Step 1

For j = 2 To 5

If a(i) > a(j) Then

temp = a(i)

a(i) = a(j)

a(i) = temp

End If

Next j

Next i

错误一:

你的想法是将第一个元素和后边的比较,最小的放在前边但是前提是只和该元素后的元素比较

但是内循环j始终是从2开始的,这就导致了当i>2时会导致反向比较,也就是说会和已经排好的元素比大小,当然肯定会比前边已经排列好的要大,结果就是大的换到了前边

错误就是j的循环开始值,不能固定,应该从i+1开始,也就是要比被比较数偏后一位介个样子:

For i = 1 To 4 Step 1

For j = i + 1 To 5

If a(i) > a(j) Then

temp = a(i)

a(i) = a(j)

a(i) = temp '有问题,应该是a(j) = temp

End If

Next j

Next i

错误二:

应该是你的疏忽,上边标了j弄成i了,白比较了~应该是

a(j) = temp

以上就是关于delphi 编写排序程序全部的内容,包括:delphi 编写排序程序、谁能帮我解释下这个排序程序、单片机排序程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://www.54852.com/zz/9360161.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存