Advertisement
Guest User

Untitled

a guest
Nov 26th, 2015
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. //Сортировка слиянием и вставками, непр. ответ на 6 тесте, там 0 вначале должен быть, а у меня в конце
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5.  
  6. int *array;
  7.  
  8. void merge(unsigned long k, unsigned long l, unsigned long m, int *array)
  9. {
  10. int *T=(int*)malloc((m-k+1)*sizeof(int));
  11. int i=k;
  12. int j=l+1;
  13. int h;
  14. for(h=0;h<m-k+1;h++){
  15. if ((j<=m) && ((i==l+1) || (array[i]>array[j]))){
  16. T[h]=array[j];
  17. j++;
  18. }
  19. else{
  20. T[h]=array[i];
  21. i++;
  22. }
  23. }
  24. for(i=k, j=0;i<m;i++, j++)
  25. array[i]=T[j];
  26. free(T);
  27. }
  28.  
  29. void insertionsort(int nel, int *array)
  30. {
  31. int i, temp, pred;
  32. for (i=1; i<nel; i++){
  33. temp=array[i];
  34. for (pred=i-1; pred>=0 && (abs(array[pred])>abs(temp));pred--){
  35. array[pred+1]=array[pred];
  36. array[pred]=temp;
  37. }
  38. }
  39. }
  40.  
  41. void mergesort(int low, int high, int nel, int *array)
  42. {
  43. int med;
  44. if (nel<=5){
  45. insertionsort(nel, array);
  46. return;
  47. }
  48. if (low<high)
  49. med=(int)(low+high)/2;
  50. mergesort(low, med, med-low+1, array);
  51. mergesort(med+1, high, high-med, array);
  52. merge(low, med, high, array);
  53. }
  54.  
  55. int main()
  56. {
  57. int i, nel;
  58. scanf("%d", &nel);
  59. array = (int*)malloc(nel*sizeof(int));
  60. for (i=0;i<nel;i++)
  61. scanf("%d", &array[i]);
  62. mergesort(0, nel-1, nel, array);
  63. for (i=0;i<nel;i++)
  64. printf("%d ", array[i]);
  65. printf("\n");
  66. free(array);
  67. return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement