Sortieren mit qsort, aber wie?

aRR

Grünschnabel
Hallo,
1000 Zufallszahlen sollen im array gespeichert und sortiert werden.
wie mach ich es mit qsort?
Die zahlen sollen vor der Ausgabe sortiert werden.
Code:
#include <iostream.h>
#include <ostream>
#include <cstdlib>

int main()
{ 


 int zufallszahl[1000];
 int i=0;
 

 while (i<1000)
	{

	zufallszahl[i]=rand();
 
	cout<<zufallszahl[i]<<endl;
 
	i++;
 
	} 

 


 return 0; 
 
}
 
Code:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define MAX_EL 1000

void mfill(int *);
void mswap(int *, int, int);
void mscramble(int *);
void mprint(int *);
int mcmp(const void *, const void *);

int main()
{
	int arr[MAX_EL];

	mfill(arr);
	printf("After fill:\n");
	mprint(arr);
	printf("\n");

	mscramble(arr);
	printf("After scramble:\n");
	mprint(arr);
	printf("\n");

	qsort(arr, MAX_EL, sizeof(int), mcmp);
	printf("After qsort:\n");
	mprint(arr);
	printf("\n");

	getchar();

	return 0;
}

void mfill(int *arr)
{
	int i;

	for(i = 0; i < MAX_EL; i++)
		arr[i] = i+1;
}

void mswap(int *arr, int i1, int i2)
{
	int tmp;

	tmp = arr[i1];
	arr[i1] = arr[i2];
	arr[i2] = tmp;
}

void mscramble(int *arr)
{
	int i;

	srand(time(0));

	for(i = 0; i < MAX_EL; i++)
		mswap(arr, i, rand()%MAX_EL);
}

void mprint(int *arr)
{
	int i;

	for(i = 0; i < MAX_EL; i++) {
		printf("%5d", arr[i]);
		if(!((i+1)%15))
			printf("\n");
	}
}

int mcmp(const void *n1, const void *n2)
{
	if(*(int*)(n1) > *(int*)(n2))
		return 1;
	else if(*(int*)n2 > *(int*)n1)
		return -1;
	else
		return 0;

	return 0;
}

Ich hoffe das hilft ein bisschen
 
Jou danke für die Mühe, aber ich glaub ich wollte was anderes.

Ich hatte ja schon den Code der mir 1000 zufallszahlen generiert. Diese sollten nur noch sortiert werden.
Und das mit dem printf sieht mehr nach C aus sollte aber Cpp sein.

trozdem danke aber das hilft mir nicht weiter
 
Muss es unbedingt quicksort sein?
Wenn du dich für eine Alternative entscheiden kannst schau mal bitte in
der STL
unter Punkt 5.3 nach. Dort hast du ne Menge Möglichkeiten deine Suche in C++ zu realisieren.

Gruß

RedWing
 
Was brauchst du denn dann?
In meinem Programm werden doch 1000 Zahlen sortiert. Du musst nur den Rest, den du nicht brauchst weglassen und die zeile mit qsort und die vergleichsfunktion in deinen code einsetzen.
Was C und C++ angeht: ist C nicht ein teil von C++?
und wenn dich dieses printf stört lass es einfach weg das brauchst du für das sortieren nämlich gar nicht.
 
Zuletzt bearbeitet:
Sorry hab nicht so den überblick in C++, aber jetzt klappt es dank deine hilfe..

versteh es zwar nicht aber es

weiss du vielleicht auch wie ich Time() da einbau?
 
Das steht doch in fragers Code:
Code:
srand(time(0));
So wird der Startwert für den ZUfallszahlengenerator gesetzt.


Eine nette Methode zum Sortieren, die allerdings C++ erfordert, ist folgende:

Code:
#include <algorithm>

int main()
{
  usign namespace std;
  
  const int anzahl = 1000;
  int zufallszahl[ anzahl ];
  
  // initalisieren (wer's hat, kann iota() benutzen)
  for ( int i = 0; i < anzahl; ++i ) 
    zufallzahl[ i ] = i;
  
  // erstmal mischen:
  random_shuffle( zufallszahlen, zufallszahlen + anzahl );
  
  // und wieder sortieren:
  sort( zufallszahlen, zufallszahlen + anzahl );

  return 1;
}
 
Zurück