插入排序法: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;}
阅读全文
0 0
- 插入排序法:ALDS1_1_A:Insertion Sort
- 第三章 ALDS1_1_A:Insertion Sort 插入排序法
- Aizu ALDS1_1_A Insertion Sort(插入排序)
- 插入排序(insertion sort)
- insertion sort 插入排序
- 插入排序(Insertion Sort)
- 插入排序 Insertion Sort
- 插入排序Insertion sort
- 插入排序 (Insertion Sort)
- 插入排序Insertion sort
- 插入排序 Insertion Sort
- 插入排序 insertion sort
- 插入排序 insertion sort
- 插入排序Insertion sort
- 插入排序 Insertion sort
- 插入排序 Insertion Sort
- 插入排序-----Insertion Sort
- INSERTION-SORT插入排序
- MySQL从头至尾汇总(2.管理篇)
- latex正上标记
- Android转载之SurfaceView使用详解
- C#属性指向自己导致的错误
- Lambda 表达式 学习
- 插入排序法:ALDS1_1_A:Insertion Sort
- 使用 traceback 获取详细的异常信息
- jQuery插件Cloud Zoom放大镜效果
- java字符集
- c语言高级指针理解及应用(上)
- 偷偷吐槽:为什么表格结构不是移动优先(Why datatable is not mobile first style)
- MS sqlserver数据库恢复出错 database is in use can not be restored
- C++面试题 sizeof
- int *pa(指针)和int *&pa(指针的引用)的区别