插入排序法: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; }
相关文章推荐
- 第三章 ALDS1_1_A:Insertion Sort 插入排序法
- 《挑战程序设计竞赛》阅读笔记一 之 ALDS1_1_A Insertion Sort
- C++插入排序法(Insertion Sort)
- 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-002插入排序法(Insertion sort)
- [C++] 插入排序法 (Insertion sort)
- Java插入排序法InsertionSort
- AOJ-ALDS1_1_A Insertion Sort【插入排序】
- 插入排序 直接插入排序的PHP实现 Straight Insertion Sort
- Insertion Sort List
- Insertion Sort List问题及解法
- Internal Sorting: Shellsort: Sorting by Insertion
- 【insertion-sort-list】
- leetcode--Insertion Sort List
- insertion-sort-list
- insertion-sort-list java code
- Insertion Sort List
- Insertion_Sort(插入排序)
- 1098. Insertion or Heap Sort (25)
- [刷题]Insertion Sort List
- straight_insertion_sort