您的位置:首页 > 其它

插入排序法:ALDS1_1_A:Insertion Sort

2017-11-18 21:15 597 查看




  请编写一个程序,用插入排序法将包含N个元素的数列A按升序排列。程序中需包含上述伪代码所表示的算法。为检验算法的执行过程,请输出个计算步骤的数组(完成输入后的数组,以及每次i自增后的数组)。

输入 在第1行输入定义数组长度的整数N。在第2行输入N个整数,以空格隔开。

输出 输出总共有N行。插入排序法每个计算步骤的中间结果各占用1行。数列的各元素之间空一个空格。请注意,行尾元素后的空格等多余的换行会被认定为Presentation Error。

限制 1<=N<=100









C语言版本:

#include<stdio.h>

/*按顺序输出数组元素*/
void trace(int A[],int N){
int i;
for(i=0;i<N;i++){
if(i>0)
printf(" ");/*在相邻元素之间输出1个空格*/
printf("%d",A[i]);
}
printf("\n");
}

/*插入排序(0起点数组)*/
void insertionSort(int A[],int N){
int i,j,v;
for(i=1;i<N;i++){
v=A[i];
j=i-1;
while(j>=0&&A[j]>v){
A[j+1]=A[j];
j--;
}
A[j+1]=v;
trace(A,N);
}
}

int main(){
int N,i,j;
int A[100];

scanf("%d",&N);
for(i=0;i<N;i++)
scanf("%d",&A[i]);

trace(A,N);
insertionSort(A,N);

return 0;
}


python版本:

n = int(input()) #输入待排序元素个数
k = [int(i) for i in input().split()] #k是一个列表,列表中每个元素以空格隔开

for i in range(n):
v = k[i]
j = i-1
while j >= 0 and k[j] > v:
k[j+1] = k[j]
j-=1
k[j+1] =v
print(' '.join(map(str, k))) #map将列表转换为字符串,join将字符串用空格隔开,连接成一个新的字符串。


java版本:

package aizu;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Insert{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
/*从标准输入流System.in中直接读取使用者输入时,使用者每输入一个字符,System.in就读取一个字符。
为了能一次读取一行使用者的输入,使用了BufferedReader来对使用者输入的字符进行缓冲。
System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换,
然后再使用BufferedReader为其增加缓冲功能
*/
int n = Integer.parseInt(br.readLine());
/*readLine()方法会在读取到使用者的换行字符时,再一次将整行字符串传入。 */
int[] a = new int
;
String[] t = br.readLine().split(" ");
for(int i = 0; i < n; i++){
a[i] = Integer.parseInt(t[i]);
}
insertionSort(a, n);
}

public static void insertionSort(int[] a, int n){
int i, j, v;
StringBuilder sb = new StringBuilder();
for(i = 0; i < n; i++){
sb.append(a[i]);
if(i != n-1)sb.append(" ");
if(i == n-1)sb.append("\n");
}
for(i = 1; i < n; i++){
v = a[i];
j = i - 1;
while(j >= 0 && a[j] > v){
a[j+1] = a[j];
j--;
}
a[j+1] = v;
for(int k = 0; k < n; k++){
sb.append(a[k]);
if(k != n-1) sb.append(" ");
//System.out.println(sb);
//sb.delete(0, sb.length());
if(k == n-1) sb.append("\n");
}
}
System.out.print(sb);
}
}


javascript版本:

function main(input) {
input = input.split("\n");
var N = parseInt(input[0]);
var values = input[1].split(" ").map(function(v) { return parseInt(v); });
insertionSort(values);
}

function insertionSort(a) {
for (var i = 0; i < a.length; i++) {
for (var j = i-1; j >= 0; j--) {
if (a[j+1] < a[j]) {
var v  = a[j];
a[j]   = a[j+1];
a[j+1] = v;
}
}
console.log(a.join(' '));
}
}
main(require("fs").readFileSync("/dev/stdin", "utf8"));


php版本:

<?php

fscanf(STDIN, '%d', $N);
$line = trim(fgets(STDIN));
$arr = explode(' ', $line);

echo implode(' ', $arr), PHP_EOL;
for ($i = 1; $i < $N; $i++) {
$tmp = $arr[$i];
if ($arr[$i - 1] > $tmp) {
$j = $i;
do {
$arr[$j] = $arr[$j - 1];
$j--;
} while ($j > 0 && $arr[$j - 1] > $tmp);
$arr[$j] = $tmp;
}
echo implode(' ', $arr), PHP_EOL;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  插入排序 算法