C言語でクイックソートを行うプログラムを探していたところ、希望していたものが見つかりました。
このプログラムは与えられた数列を昇順に並び替えるものなのですが、これを降順に並び替えるにはどうしたらよいでしょうか?
いろいろ試してみたのですが、無限ループになってしまいます。
#include <stdio.h>
void QSort(int x[ ], int left, int right);
void Swap(int x[ ], int i, int j);
void ShowData(int x[ ], int n);
void main(void);
/* クイックソートを行う */
void QSort(int x[ ], int left, int right)
{
int i, j;
int pivot;
i = left; /* ソートする配列の一番小さい要素の添字 */
j = right; /* ソートする配列の一番大きい要素の添字 */
pivot = x[(left + right) / 2]; /* 基準値を配列の中央付近にとる */
while (1) { /* 無限ループ */
while (x[i] < pivot) /* pivot より大きい値が */
i++; /* 出るまで i を増加させる */
while (pivot < x[j]) /* pivot より小さい値が */
j--; /* 出るまで j を減少させる */
if (i >= j) /* i >= j なら */
break; /* 無限ループから抜ける */
Swap(x, i, j); /* x[i] と x[j]を交換 */
i++; /* 次のデータ */
j--;
}
ShowData(x, 10); /* 途中経過を表示 */
if (left < i - 1) /* 基準値の左に 2 以上要素があれば */
QSort(x, left, i - 1); /* 左の配列を Q ソートする */
if (j + 1 < right) /* 基準値の右に 2 以上要素があれば */
QSort(x, j + 1, right); /* 右の配列を Q ソートする */
}
/* 配列の要素を交換する */
void Swap(int x[ ], int i, int j)
{
int temp;
temp = x[i];
x[i] = x[j];
x[j] = temp;
}
/* n 個のデータを表示する */
void ShowData(int x[ ], int n)
{
int i;
for (i = 0; i < n ; i++)
printf("%d ", x[i]);
printf("\n");
}
void main(void)
{ /* ソートする配列 */
int x[ ] = {6, 3, 1, 7, 0, 4, 8, 5, 2, 9};
int n = 10;
printf("ソート前:\n");
ShowData(x, n);
printf("ソート中:\n");
QSort(x, 0, n - 1);
printf("ソート後:\n");
ShowData(x, n);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リスト構造のソートで悩んでま...
-
System.IO.Directory.GetFiles...
-
Excelですべての組合せ(重複組...
-
C言語・要素除去
-
C# DataTableの行をソートしてD...
-
DataGridViewの複数列を連動し...
-
C言語でファイルの中身をソー...
-
datagridviewの並べ替え
-
昇順と降順
-
VBA基本構文の作り方 2列の...
-
excel VBA の条件をつけての列...
-
C# ArrayListを二次元配列のよ...
-
ファイル名「1.jpg ~10.jpg~...
-
C# DataGridView のヘッダーセ...
-
datatablesのソートを数字順に...
-
listboxの並び替え
-
構造体のリストをソートしたい。
-
配列の問題
-
VB6でデータを昇順に並べ替える
-
DataGridViewの昇順降順。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
なぜ?counterintuitive
-
ファイル名「1.jpg ~10.jpg~...
-
Excelですべての組合せ(重複組...
-
C# DataTableの行をソートしてD...
-
n番目に大きい数を求めるアル...
-
リスト構造のソートで悩んでま...
-
C言語・要素除去
-
10個の整数を入力して小さい順...
-
VBA基本構文の作り方 2列の...
-
あるディレクトリ内のファイル...
-
excel VBA の条件をつけての列...
-
excel VBA リストビューの行...
-
数字文字列のソート方法
-
Excel VBAで並べ替えをしたい
-
VBScriptで重複レコードを削除...
-
vbでDataTableの抽出コピー
-
構造体配列のソート
おすすめ情報