fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define randomize() srand(time(NULL))
  5. #define random(n) (rand() % (n))
  6. #define MAX 6
  7.  
  8. int arr[MAX]={5,8,3,6,1,2};
  9.  
  10. void quickSort(int arr[],int left,int Right){
  11.  
  12.  
  13. int store ; // 값 교환시 필요
  14. int store2;
  15. int _left= left+1;
  16. int right=Right;
  17. randomize();
  18.  
  19. int pivot=left+random(Right-left+1);
  20.  
  21.  
  22. store=arr[left];
  23. arr[left]=arr[pivot]; // 맨 왼쪽의 값과 랜덤으로 정해진 피벗포인터의 값을 교환한다.
  24. arr[pivot]=store;
  25.  
  26.  
  27. printf("_left=%d pivot=%d right=%d\n",_left,pivot,right);
  28.  
  29. if(left<Right){
  30.  
  31. while(_left<right){ // 포인터가 교차할 때 까지 반복한다
  32.  
  33.  
  34. if(arr[_left]<arr[left]){ // 피벗값보다 큰 값을 만날때 까지 이동한다.
  35. _left++;
  36. }
  37.  
  38. if(arr[right]>arr[left]){ // 피벗값보다 작은 값을 만날때 까지 이동한다.
  39. right--;
  40. }
  41.  
  42. if(arr[_left]>arr[left] && arr[right]<arr[left] && _left<right) { // 포인터가 더이상 움직이지 않으면서 교차하지 않았을 때만
  43. store2=arr[_left];
  44. arr[_left]=arr[right]; //포인터가 가리키는 값을 교환한다.
  45. arr[right]=store2;
  46. }
  47.  
  48. if(_left>right && right!=left){ //포인터가 교차함과 동시에 피벗값을 가리키지 않으면
  49. pivot=right; //오른쪽 포인터가 가르키는 곳을 피벗으로 한다.
  50.  
  51. store=arr[left];
  52. arr[left]=arr[pivot]; // 맨 왼쪽에 있던 값이랑 피벗값을 교환한다.
  53. arr[pivot]=store;
  54.  
  55. }
  56.  
  57.  
  58.  
  59. }
  60.  
  61. for(int i=0;i<MAX;i++){
  62. printf("%d",arr[i]);
  63. }
  64. puts(" ");
  65.  
  66.  
  67. quickSort(arr,left,pivot-1);
  68. quickSort(arr,pivot+1,Right);
  69.  
  70. }
  71.  
  72. else
  73. return;
  74.  
  75. }
  76.  
  77. int main (void){
  78.  
  79. quickSort(arr,0,MAX-1);
  80.  
  81.  
  82.  
  83. }
Runtime error #stdin #stdout 0s 5348KB
stdin
Standard input is empty
stdout
Standard output is empty