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…
Reference in New Issue
Block a user