fork download
  1. // InsertionSort
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. void printA(int a[], int n){
  7. int i;
  8. for(i=0;i<n;i++){
  9. printf("%d ",a[i]);
  10. }
  11. printf("\n");
  12. }
  13.  
  14. void swap(int* a, int* b){
  15. int tmp;
  16. tmp = *a;
  17. *a = *b;
  18. *b = tmp;
  19. }
  20.  
  21. void InsertionSort(int a[], int n){
  22. //ここを書く
  23. int i,j,tmp;
  24. for(i=1;i<n;i++){//a[0]は一番左の数だから1から。
  25. tmp = a[i];//挿入する数を一時的に保存する。
  26. j = i - 1;//すでに挿入済みの数を参照するため。
  27. while( j >= 0 && a[j] > tmp ){
  28. //tmpより大きい数が左にあるならそれらを右にずらしてtmpが入るスペースを作る。
  29. a[j+1] = a[j];
  30. j--;
  31. //printA(a,n);
  32. }
  33. a[j+1] = tmp;
  34. }
  35. }
  36.  
  37. /*回答例
  38. void InsertionSort(int a[], int n){
  39.   int i,j,tmp;
  40.   for(i=1;i<n;i++){//a[0]は一番左の数だから1から。
  41.   tmp = a[i];//挿入する数を一時的に保存する。
  42.   j = i - 1;//すでに挿入済みの数を参照するため。
  43.   while( j >= 0 && a[j] > tmp ){
  44.   a[j+1] = a[j];
  45.   j--;
  46.   }
  47.   a[j+1] = tmp;//j--した分1足してtmpを挿入
  48.   }
  49. }
  50. */
  51.  
  52. int main(void){
  53. int n,i;
  54. int *v;
  55. scanf("%d",&n);
  56. v = (int*)malloc(sizeof(int)*n);
  57. if(v==NULL){
  58. printf("ERROR\n");
  59. return -1;
  60. }
  61. for(i=0;i<n;i++){
  62. scanf("%d",&v[i]);
  63. }
  64. InsertionSort(v,n);https://w...content-available-to-author-only...b.com/#tab-stdin
  65. printA(v,n);
  66. free(v);
  67. return 0;
  68. }
  69.  
Success #stdin #stdout 0s 5320KB
stdin
8
21 55 5 13 8 2 34 3
stdout
2 3 5 8 13 21 34 55