fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define MAX 100
  5. #define RANGE 1000
  6.  
  7. /* 정렬을 수행하는 부분*/
  8. void QuickSort(int Start, int Last, int *Arr){
  9. int L=Start;
  10. int R=Last;
  11. int temp=0;
  12. int pivot=(Arr[Start]+Arr[Last]+Arr[(Start+Last)/2])/3;
  13. while(1){
  14. while(Arr[L]<pivot) L++;
  15. while(Arr[R]>pivot) R--;
  16. if(L<R){
  17. temp = Arr[L];
  18. Arr[L] = Arr[R];
  19. Arr[R] = temp;
  20. }
  21. else break;
  22. }
  23.  
  24. if((L-1)>Start) QuickSort(Start,L-1,Arr);
  25. if((R+1)>Last) QuickSort(R+1,Last,Arr);
  26. }
  27.  
  28. /* 1~RANGE의 범위를 갖는 겹치지 않는 MAX개의 양수를 생성하는 부분 */
  29. void MakeArr(int *Arr){
  30. int i,k,r;
  31. int ran[RANGE] ={0,};
  32. srand((int)time(NULL));
  33. for(i=0;i<MAX;i++){
  34. r = rand()%(RANGE-1)+1;
  35. if(!ran[r]){
  36. Arr[i]=r;
  37. ran[r]=1;
  38. }
  39. else i--;
  40. }
  41. }
  42.  
  43. /* 배열의 출력. 소팅이 완벽한지 검사해본다. */
  44. void PrintArr(int *Arr){
  45. int i=0;
  46. for(i=0;i<MAX-1;i++){
  47. if(Arr[i]>Arr[i+1]) break;;
  48. }
  49. if(i==MAX)printf("perfectly sorted\n");
  50. else printf("not perfect\nArr[%d]=%d,Arr[%d]=%d \n",i,Arr[i],i+1,Arr[i+1]);
  51. for(i=0;i<MAX;i++){
  52. printf("%d ",Arr[i]);
  53. }
  54. }
  55.  
  56. int main(void) {
  57. int Arr[MAX];
  58. int i;
  59. int length;
  60.  
  61. if(RANGE<MAX){
  62. printf("RANGE must be larger than MAX");
  63. return -1;
  64. }
  65.  
  66. MakeArr(Arr);
  67. for(i=0;i<MAX;i++){
  68. printf("%d ",Arr[i]);
  69. }
  70. printf("\n");
  71. length = sizeof(Arr)/sizeof(int);
  72. QuickSort(0,length-1,Arr);
  73. PrintArr(Arr);
  74. return 0;
  75. }
  76.  
Success #stdin #stdout 0s 2248KB
stdin
Standard input is empty
stdout
661 2 199 167 318 517 928 440 560 31 304 151 244 964 704 470 543 713 540 463 388 299 705 647 783 247 794 396 268 57 269 349 223 305 585 869 744 863 619 48 14 862 730 436 332 291 979 45 549 161 847 865 797 830 310 98 461 519 85 528 742 389 113 330 851 975 948 618 708 529 348 144 860 357 123 623 905 283 773 472 866 570 820 415 599 565 512 60 84 315 306 544 703 419 874 555 541 173 71 239 
not perfect
Arr[4]=60,Arr[5]=48 
2 14 31 45 60 48 57 173 71 167 161 151 98 84 199 85 123 144 113 330 348 299 283 244 310 247 304 315 268 306 269 349 223 305 291 332 318 239 619 863 744 862 730 436 869 585 979 396 549 794 847 865 797 830 783 647 461 519 705 528 742 389 388 463 851 975 948 618 708 529 540 713 860 357 543 623 905 470 773 472 866 570 820 415 599 565 512 704 964 560 440 544 703 419 874 555 541 928 517 661