add quick sort

This commit is contained in:
kemasama 2022-04-22 20:22:28 +09:00
parent 7079b1d697
commit b1e74292c4
3 changed files with 137 additions and 0 deletions

View File

@ -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
View 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

Binary file not shown.