舔六年级小女孩的光脚:帕斯卡语言插入排序的程序
来源:百度文库 编辑:高校问答 时间:2024/05/06 00:11:48
program charu(input,output);
var
a:array[1..11] of integer;
x,I,j,n:integer;
f:Boolean;
Begin
{给数组赋一个已经排序好的初值,设A[1]到A[10]分别等于1到10}
For I:=1 to 10 do A[I]:=I;
Writeln(‘数组原来的排列值是:’);
For I:=1 to 10 do write(a[I]:4);
Writeln;
Writeln(‘输入一个整数:’);
Readln(x);
F:=false;
I:=0;N:=10;
Repeat
I:=I+1;
If a[I]>x then f:=ture;
Until I>n or f=ture;
J:=n+1;
While j<>I do
begin
A[j]:=a[j-1];
J:=j-1
End;
A[I]:=x;
Writeln(‘ 插入一个数后的数组排列值是:’);
For I:=1 to n+1 do
Write(a[I]:4)
End.
#include <stdio.h>
#include <stdlib.h>
void insert(int *arr, int a, int n){ /*0到n-1都已排好序*/
int i;
int key = a;
for(i=0; i<n; i++){
if(key < arr[i]){
int j;
for(j=n-1; j>=i; j--){
arr[j+1] = arr[j];
}
arr[i] = key;
return;
}
}
arr[n] = key;
return;
}
void sort(int *arr, int size){
if(size<2)
return;
int i;
for(i=1; i<size; i++){
insert(arr, arr[i], i);
}
}
void main(){
int i, n, *arr;
printf("请输入数组的大小 n = ");
scanf("%d", &n);
arr = (int*)malloc(sizeof(int)*n);
printf("请输入%d个数组元素:\n", n);
for(i=0; i<n; i++){
scanf("%d", &arr[i]);
}
printf("在排序前,数组为:");
for(i=0; i<n; i++){
printf("%d ", arr[i]);
}
printf("\n调用排序函数中...\n");
sort(arr, n);
printf("在排序后,数组变为:");
for(i=0; i<n; i++){
printf("%d ", arr[i]);
}
printf("\n");
free(arr);
}
排序
排序就是将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程。排序问题是一个十分重要的问题,并且排序的方法有很多种:
例子:输入20个数,将它们按照从高到低的次序排列以后输出。
方法一:选择排序
选择排序的基本思想:首先从要进行排序的数中选择最大的一个数,将它放在第一个位置,然后从剩下的数中选择最大的放在第二个位置,如此继续,直到最后剩下的两个数中选出较大的数放在倒数第二个位置,剩下的一个数放在最后完成排序。
具体操作:对需要排序的数据序列进行n-1遍的处理,第1遍处理是将L帕斯卡pascal排序问题[2..n]中每一个元素与L[1]比较,最大者与L[1]交换位置,第2遍处理是将L[3..n]中每一个元素与L[2]比较,最大者与L[2]交换位置,......,第i遍处理是将L[i+1..n]中每一个元素与L[i]比较,最大者与L[i]交换位置。
算法:1、输入20个数到数组a中;
2、用外循环确定每一个数,需要循环19次;(For i:=1 to 19 do)
3、用内循环实现确定数与后面所有数的比较和交换;For j:=i+1 to 20 do
4、输出结果。 If a[i]帕斯卡pascal排序问题
的撒范围发生大发未发生的发射范德萨vff
法到底是生生世世生生世世生生世世生生世世
这个······