fix: quick sort
This commit is contained in:
		
							parent
							
								
									258c67f37b
								
							
						
					
					
						commit
						dfe16c7756
					
				| @ -32,7 +32,8 @@ | |||||||
| 
 | 
 | ||||||
| 数値配列のクイックソートを行う | 数値配列のクイックソートを行う | ||||||
| 
 | 
 | ||||||
| 2022/04/22 | 2022/04/22 q_sort | ||||||
|  | 2022/04/26 quick_sort | ||||||
| 
 | 
 | ||||||
| #### 処理内容 | #### 処理内容 | ||||||
| 
 | 
 | ||||||
|  | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										97
									
								
								quick_sort/quick_sort.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								quick_sort/quick_sort.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,97 @@ | |||||||
|  | #include <stdio.h> | ||||||
|  | 
 | ||||||
|  | int | ||||||
|  | swap( | ||||||
|  | int *x, | ||||||
|  | int *y | ||||||
|  | ) | ||||||
|  | { | ||||||
|  |     int temp; | ||||||
|  | 
 | ||||||
|  |     temp = *x; | ||||||
|  |     *x = *y; | ||||||
|  |     *y = temp; | ||||||
|  | 
 | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*************************************************************************
 | ||||||
|  |     クイックソートを行う | ||||||
|  | *************************************************************************/ | ||||||
|  | int | ||||||
|  | quick_sort( | ||||||
|  | int *array, // ソートする配列
 | ||||||
|  | int left,   // 左端
 | ||||||
|  | int right   // 右端(※配列の要素数ではない)
 | ||||||
|  | ) | ||||||
|  | { | ||||||
|  |     int smaller_index; | ||||||
|  |     int larger_index; | ||||||
|  |     int pivot_index; | ||||||
|  |     int pivot; | ||||||
|  | 
 | ||||||
|  |     if ( left >= right ) { | ||||||
|  |         return -1; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     smaller_index = left; | ||||||
|  |     larger_index = right; | ||||||
|  |     pivot_index = left; | ||||||
|  |     pivot = array[left]; | ||||||
|  | 
 | ||||||
|  |     while ( smaller_index < larger_index ) { | ||||||
|  |         while ( array[smaller_index] < pivot ) | ||||||
|  |         { | ||||||
|  |             smaller_index++; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         while ( array[larger_index] > pivot ) | ||||||
|  |         { | ||||||
|  |             larger_index--; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if ( array[smaller_index] > array[larger_index] ) { | ||||||
|  |             swap(&array[smaller_index], &array[larger_index]); | ||||||
|  |         } else if ( array[smaller_index] == array[larger_index] ) { | ||||||
|  |             smaller_index++; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     quick_sort(array, left, larger_index - 1); | ||||||
|  |     quick_sort(array, larger_index + 1, right); | ||||||
|  | 
 | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /***********************************
 | ||||||
|  | メイン関数 | ||||||
|  | ***********************************/ | ||||||
|  | int | ||||||
|  | main() | ||||||
|  | { | ||||||
|  |     int array[] = { | ||||||
|  |         10, 20, 30, 50, | ||||||
|  |         50, 10, 45, 65, | ||||||
|  |         76, 54, 56, 15, | ||||||
|  |         34, 31, 14, 17, | ||||||
|  |         14, 15, 11, 16, | ||||||
|  |         90, 19, 98, 76, | ||||||
|  |         75, 15, 161, 165, | ||||||
|  |         166, 167, 87, 86 | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     int length = sizeof(array) / sizeof(int); | ||||||
|  | 
 | ||||||
|  |     printf("Length: %d\n", length); | ||||||
|  |     quick_sort(array, 0, length - 1); | ||||||
|  | 
 | ||||||
|  |     int i ; | ||||||
|  |      | ||||||
|  |     for ( i = 0 ; i < length ; i++ ) | ||||||
|  |     { | ||||||
|  |         printf("%d", array[i]); | ||||||
|  |         printf("\n"); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user