插入排序法:ALDS1_1_A:Insertion Sort

来源:互联网 发布:附加数据库失败 编辑:程序博客网 时间:2024/06/16 03:59

这里写图片描述
这里写图片描述
  请编写一个程序,用插入排序法将包含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[n];        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版本:

<?phpfscanf(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;}
原创粉丝点击