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. 生徒配列を定義する | ||||
| @ -12,6 +14,24 @@ | ||||
| 3. ランダムに点数を生成する | ||||
| 4. 科目ごとの平均点、最大点、最低点を標準出力する | ||||
| 
 | ||||
| ### クイックソート | ||||
| 
 | ||||
| 数値配列のクイックソートを行う | ||||
| 
 | ||||
| 2022/04/22 | ||||
| 
 | ||||
| #### 処理内容 | ||||
| 
 | ||||
| 1. 配列と、左端(0)、右端(配列の長さ)を渡す | ||||
| 2. 左端が右端以上であるならピボットを取得する | ||||
| 3. ピボット(左端)のデータより小さければiをすすめる | ||||
| 4. ピボットのデータより大きければjを戻す | ||||
| 5. 中央値まで求めたらそのデータを比較し、入れ替える | ||||
| 6. i が j 以下であればループを行う | ||||
| 7. ピボットとjを入れ替える | ||||
| 8. ピボットより小さいデータをクイックソートする | ||||
| 9. ピボットより大きいデータをクイックソートする | ||||
| 
 | ||||
| # Copyright | ||||
| 
 | ||||
| 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