diff --git a/README.md b/README.md index 52fe334..5a19471 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,8 @@ 数値配列のクイックソートを行う -2022/04/22 +2022/04/22 q_sort +2022/04/26 quick_sort #### 処理内容 diff --git a/quick_sort/qsort b/quick_sort/quick_sort similarity index 94% rename from quick_sort/qsort rename to quick_sort/quick_sort index a2b74ff..115e6ad 100755 Binary files a/quick_sort/qsort and b/quick_sort/quick_sort differ diff --git a/quick_sort/quick_sort.c b/quick_sort/quick_sort.c new file mode 100644 index 0000000..b3fa1ab --- /dev/null +++ b/quick_sort/quick_sort.c @@ -0,0 +1,97 @@ +#include + +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; +}