add quick sort
This commit is contained in:
		
							parent
							
								
									7079b1d697
								
							
						
					
					
						commit
						b1e74292c4
					
				
							
								
								
									
										20
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								README.md
									
									
									
									
									
								
							| @ -5,6 +5,8 @@ | |||||||
| 
 | 
 | ||||||
| 構造体とポインタについての学習 | 構造体とポインタについての学習 | ||||||
| 
 | 
 | ||||||
|  | 2022/04/09 | ||||||
|  | 
 | ||||||
| #### 処理内容 | #### 処理内容 | ||||||
| 
 | 
 | ||||||
| 1. 生徒配列を定義する | 1. 生徒配列を定義する | ||||||
| @ -12,6 +14,24 @@ | |||||||
| 3. ランダムに点数を生成する | 3. ランダムに点数を生成する | ||||||
| 4. 科目ごとの平均点、最大点、最低点を標準出力する | 4. 科目ごとの平均点、最大点、最低点を標準出力する | ||||||
| 
 | 
 | ||||||
|  | ### クイックソート | ||||||
|  | 
 | ||||||
|  | 数値配列のクイックソートを行う | ||||||
|  | 
 | ||||||
|  | 2022/04/22 | ||||||
|  | 
 | ||||||
|  | #### 処理内容 | ||||||
|  | 
 | ||||||
|  | 1. 配列と、左端(0)、右端(配列の長さ)を渡す | ||||||
|  | 2. 左端が右端以上であるならピボットを取得する | ||||||
|  | 3. ピボット(左端)のデータより小さければiをすすめる | ||||||
|  | 4. ピボットのデータより大きければjを戻す | ||||||
|  | 5. 中央値まで求めたらそのデータを比較し、入れ替える | ||||||
|  | 6. i が j 以下であればループを行う | ||||||
|  | 7. ピボットとjを入れ替える | ||||||
|  | 8. ピボットより小さいデータをクイックソートする | ||||||
|  | 9. ピボットより大きいデータをクイックソートする | ||||||
|  | 
 | ||||||
| # Copyright | # Copyright | ||||||
| 
 | 
 | ||||||
| Copyright (c) 2022 kema All Rights Reserved. | Copyright (c) 2022 kema All Rights Reserved. | ||||||
|  | |||||||
							
								
								
									
										117
									
								
								quick_sort/q_sort.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								quick_sort/q_sort.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,117 @@ | |||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | 
 | ||||||
|  | /***********************************
 | ||||||
|  | XとYを入れ替える | ||||||
|  | ***********************************/ | ||||||
|  | int | ||||||
|  | swap( | ||||||
|  | int *x, | ||||||
|  | int *y | ||||||
|  | ) | ||||||
|  | { | ||||||
|  |     int temp; | ||||||
|  | 
 | ||||||
|  |     temp = *x; | ||||||
|  |     *x = *y; | ||||||
|  |     *y = temp; | ||||||
|  | 
 | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /***********************************
 | ||||||
|  | 中央値(Pivot)を求め、入れ替える | ||||||
|  | ***********************************/ | ||||||
|  | int | ||||||
|  | get_pivot( | ||||||
|  | int array[], | ||||||
|  | int left, | ||||||
|  | int right | ||||||
|  | ) | ||||||
|  | { | ||||||
|  |     int i; | ||||||
|  |     int j; | ||||||
|  |     int pivot; | ||||||
|  | 
 | ||||||
|  |     i = left; | ||||||
|  |     j = right + 1; | ||||||
|  |     pivot = left; | ||||||
|  | 
 | ||||||
|  |     do  | ||||||
|  |     { | ||||||
|  |         do | ||||||
|  |         { | ||||||
|  |             i++; | ||||||
|  |         } while ( array[i] < array[pivot] ); | ||||||
|  | 
 | ||||||
|  |         do { | ||||||
|  |             j--; | ||||||
|  |         } while ( array[pivot] < array[j] ); | ||||||
|  | 
 | ||||||
|  |         if ( i < j ) | ||||||
|  |         { | ||||||
|  |             swap(&array[i], &array[j]); | ||||||
|  |         } | ||||||
|  |     } while (i < j); | ||||||
|  | 
 | ||||||
|  |     swap(&array[pivot], &array[j]); | ||||||
|  | 
 | ||||||
|  |     return j; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /***********************************
 | ||||||
|  | クイックソートを行う | ||||||
|  | ***********************************/ | ||||||
|  | int | ||||||
|  | q_sort( | ||||||
|  | int array[], | ||||||
|  | int left, | ||||||
|  | int right | ||||||
|  | ) | ||||||
|  | { | ||||||
|  |     int pivot; | ||||||
|  | 
 | ||||||
|  |     if ( left < right ) | ||||||
|  |     { | ||||||
|  |         pivot = get_pivot(array, left, right); | ||||||
|  |         q_sort(array, left, pivot - 1); | ||||||
|  |         q_sort(array, pivot + 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); | ||||||
|  |     q_sort(array, 0, length); | ||||||
|  | 
 | ||||||
|  |     int i ; | ||||||
|  |      | ||||||
|  |     for ( i = 0 ; i < length ; i++ ) | ||||||
|  |     { | ||||||
|  |         printf("%d", array[i]); | ||||||
|  |         printf("\n"); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
							
								
								
									
										
											BIN
										
									
								
								quick_sort/qsort
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								quick_sort/qsort
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user