クイックソートでコンパイルできません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
もとき

クイックソートでコンパイルできません

#1

投稿記事 by もとき » 6年前

下記の乱数を100個発生させ、クイックソートし昇順に10個ずつ並べるプログラムをvisualstudioでコンパイルしたところ
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー (アクティブ) E0165 関数呼び出しの引数が少なすぎます
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー C2660 'QuickSort': 関数に 2 個の引数を指定できません。
という2つのエラーが発生しました。手に負えないので修正点を教えていただけないでしょうか。よろしくお願いします。

コード:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_DATA 100

void QuickSort(int num[], int begin, int end);
void datasee(int num[], int n);
int main(void);

//バブルソートを降順に行い、並び替え終了回数を表示//
void QuickSort(int num[], int begin, int end)
{
	int i = begin;
	int j = end;
	int pivot;
	int temp;

	pivot = num[(begin + end) / 2];  // 中央の値をpivotにする

	while (1)
	{
		while (num[i] < pivot) { ++i; }  /* 枢軸以上の値が見つかるまで右方向へ進めていく */
		while (num[j] > pivot) { --j; }  /* 枢軸以下の値が見つかるまで左方向へ進めていく */
		if (i >= j)break;  // 軸がぶつかったらソート終了

						   // 入れ替え
		temp = num[i];
		num[i] = num[j];
		num[j] = temp;
		i++;
		j--;
	}

	// 軸の左側をソートする
	if (begin < i - 1) { QuickSort(num,begin, i - 1); }
	// 軸の右側をソートする
	if (j + 1 < end) { QuickSort(num, j + 1, end); }
}


 //乱数を10個ずつ並べる//
void datasee(int num[], int n)
{
	int i = 1;
	while (n--) {
		printf("%3d  ", *num++);
		i++;
		if (n % 10 == 0) {
			printf("\n");
		}
	}
	printf("\n");
}


//乱数を生成し、Befor,Afterを表示//
int main(void)
{
	int num[100], i;
	srand((unsigned)time(NULL));

	for (i = 0; i < NUM_DATA; i++) {

		num[i] = rand();

	}

	printf("(Before)\n");
	datasee(num, NUM_DATA);
	printf("\n");


	QuickSort(num, NUM_DATA);
	printf("\n");


	printf("(After)\n");
	datasee(num, NUM_DATA);
	printf("\n");

}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: クイックソートでコンパイルできません

#2

投稿記事 by みけCAT » 6年前

73行目の

コード:

	QuickSort(num, NUM_DATA);

コード:

	QuickSort(num, 0, NUM_DATA - 1);
とすればいいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

CA

Re: クイックソートでコンパイルできません

#3

投稿記事 by CA » 6年前

参考になるか分かりませんが、どうぞ。
VS2017を使用しています。

コード:

#include<cstdlib>
#include<iostream>
#include<random> 

using namespace std;

/*
* double比較関数、降順にソート。
*/
int double_ddd(const double* a, const double* b)
{
	return *a < *b ? 1 : *a > *b ? -1 : 0;
}

 int main() 
 {

	 int nx = 10;
	 double* x = new double[nx]; // 配列を生成します。

	 /*
	 * メルセヌ・ツイスタ
	 */
	 random_device rnd;
	 mt19937 mt(rnd());
	 uniform_int_distribution<int>rand5(0, 9);



	 for (int ii = 0; ii <= nx; ii++)
	 {
		 for (int i = 0; i < nx; i++)
		 {
			 x[i] = rand5(mt);
		 }
		 qsort(x, nx, sizeof(double), reinterpret_cast<int(*)(const void*, const void*)>(double_ddd));

		 for (int i = 0; i < nx; i++)
		 {
			 cout << " " << x[i];
		 }
		 cout << endl;
	 }
	system("pause");

}

CAFD
記事: 1
登録日時: 6年前

Re: クイックソートでコンパイルできません

#4

投稿記事 by CAFD » 6年前

oh...上のソースコードは間違いだらけでした...申し訳ないです。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: クイックソートでコンパイルできません

#5

投稿記事 by Dixq (管理人) » 6年前

うちのサイトでクイックソート解説アプリなるものを配布しているのでよかったらどうぞ
http://dixq.net/sort.html

返信

“C言語何でも質問掲示板” へ戻る