fork download
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<iostream>
  5. using namespace std;
  6. int min(int a,int b){
  7. return a<=b?a:b;
  8.  
  9. }
  10. #define swap(a,b){ char *t=x[a];x[a]=x[b];x[b]=t;}
  11. #define i2c(i) x[i][depth]
  12. void vecswap(int i, int j, int n, char *x[])
  13. { while (n-- > 0) {
  14. swap(i, j);
  15. i++;
  16. j++;
  17. }
  18. }
  19. void ssort1(char *x[],int n,int depth);
  20. void ssort(char *x[],int n)
  21. {
  22. ssort1(x,n,0);
  23.  
  24. }
  25. void ssort1(char *x[],int n,int depth){
  26. int a,b,c,d,r,v;
  27. if(n<=1)
  28. return ;
  29. a=rand()%n;
  30. swap(0,a);
  31. v=i2c(0);
  32. a=b=1;
  33. c=d=n-1;
  34. for (;;)
  35. {
  36. while(b<=c && (r=i2c(b)-v)<=0){
  37. if (r==0) { swap(a,b);a++;}
  38.  
  39. b++;
  40. }
  41.  
  42. while(b<=c && (r=i2c(c)-v)>=0){
  43. if (r==0) { swap(c,d); d--;}
  44. c--;
  45.  
  46. }
  47.  
  48. if (b>c) break;
  49. swap(b,c);
  50. b++;
  51. c--;
  52. }
  53. r=min(a,b-a);vecswap(0,b-r,r,x);
  54. r = min(d-c, n-d-1); vecswap(b, n-r, r, x);
  55. r=b-a;ssort1(x,r,depth);
  56. if (i2c(r)!=0)
  57. ssort1(x+r,a+n-d-1,depth+1);
  58. r=d-c; ssort1(x+n-r,r,depth);
  59.  
  60.  
  61.  
  62. }
  63.  
  64. int main(){
  65. char *s[]={"dato","giorgi","beso","computer","deda","kata","spilo"};
  66. int n=sizeof(s)/sizeof(char);
  67.  
  68. ssort(s,n);
  69. for (int i=0;i<n;i++)
  70. cout<<s[i]<<" "<<endl;
  71.  
  72.  
  73.  
  74.  
  75. return 0;
  76. }
Runtime error #stdin #stdout 0.01s 2720KB
stdin
Standard input is empty
stdout
Standard output is empty