
气泡法
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;
}
此段时间应安静或听音乐,夫妻同房应排在此时,不应在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 编写排序程序、谁能帮我解释下这个排序程序、单片机排序程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)