indexed bubble sort funktion

Tags:    c++ php

User
Bruger #911 @ 17.04.02 23:00
allesammen,

Jeg skal aendre nedenstaaende prgram og lave en indexed bubble sort funktion.
Det skal aendres ved hjaelp af foelgende data:

void indexedbubblesort (float valuearray [], int indexarray[], int n)
valuearray - indeholder input til array
index- indeholder indices til value array
int n- indeholder antal elementer i arrays

Er der en der kan se hvordan de kan aendres og opfylde ovenstaaende betingelser?
Paa forhaand tak!

#include "iostream.h"
#include "time.h"
#include "stdlib.h"
#include "stdio.h"

// function prototypes
void bubbleSort(float valuearray[], int n) ;

void main()
{
// randomize by time
srand( (unsigned)time( NULL ) );

// vars used
int i, n = 10;
float *array;

// alloc vars
array = new float[n];

// test alloc
if( array == 0 )
{
cout << "alloc failed" << endl;
return;
}

// generate number between 0.0 and 100.0
for( i = 0; i<n; i++ )
{
array = (rand()%1000)*0.1f;
}

// cout unsorted
cout << "Unsorted numbers:" << endl<< endl;
for( i = 0; i<n; i++ )
{
cout << array << " ";
}
//function call
bubbleSort(array, n);

// cout sorted
cout <<endl<<endl<< "Sorted numbers:" <<endl<<endl;
for( i = 0; i<n; i++ )
{
cout << array << " ";
}

cout << endl;
}

void bubbleSort(float valuearray[], int n)
{
bool exchanges;
do {
exchanges = false; // assume no exchanges
for (int i=0; i<n-1; i++)
{
if (valuearray > valuearray[i+1])
{
float temp = valuearray;
valuearray = valuearray[i+1];
valuearray[i+1] = temp;
exchanges = true; // after exchange, must look again
}
}
} while (exchanges);
}




5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
User
Bruger #24 @ 18.04.02 09:30
void bubbleSort (float *record, int N)
{
for (int i = N; i > 1; i--)
for (int j = 1; j < i; j++)
if (record[j-1 > record[j]) {
record[j-1]^=record[j];
record[j] ^=record[j-1];
record[j-1]^=record[j];
}
}


hvad mener du liige med index ??? det kan være mange ting.. tror ikke lige jeg fatter det helt[Redigeret d. 18/04-02 11:32:27 af Daniel Lauritzen]



User
Bruger #911 @ 18.04.02 20:50
Hej Daniel,
Tak for dit svar.
Ja, det er ogsaa mit problem at forstaa hvad der lige menes med en indexed funktion. Jeg har skrevet det som jeg har faaet det "serveret". Jeg troede egentlig at det bare var fordi at jeg er nybegynder i det her at jeg ikke forstod det. Mit bud er at jeg skal indsaette en struct, men jeg er meget i tvivl.

Med venlig hilsen
Maria



User
Bruger #24 @ 19.04.02 10:46
Hej Maria.

Nej - det er ikke bare dig :) Tit kalder folk det noget andet end det er (for at være smarte ?) - eller tror de bare alle kan forstå det, fordi de kan.. hvad ved jeg.. nåå.. meeen.....

Mit gæt ville være at indexarray plads 0 inderholder positionen på det laveste tal i float arrayet... plads 1 den næst laveste etc.. altså:

float ftab[5] = { 2.3, 4.1, 0.4, 3.1, 1.4 };
int index[5] = { 2,4,0,3,1};

så hvis man vil have den laveste float bliver det:

float tal = ftab[index[0]];

men det har jeg svært ved at se nogen mening i... ud over øvelsen.... desuden er bubble sort kun godt til små mængder tal, eller tal der næsten ER sorteret..... men det er en anden snak :)

MVH
Daniel[Redigeret d. 19/04-02 10:57:51 af Daniel Lauritzen]



User
Bruger #911 @ 19.04.02 11:17
Hej Daniel,

Endnu engang tak for dit svar.
Kan jeg tillade mig at spoerge til dit bud paa nedenstaaende funktion. Hvad var din tankegang i det?
Men venlig hilsen
Maria

void bubbleSort (float *record, int N)
{
for (int i = N; i > 1; i--)
for (int j = 1; j < i; j++)
if (record[j-1 > record[j]) {
record[j-1]^=record[j];
record[j] ^=record[j-1];
record[j-1]^=record[j];
}
}




User
Bruger #24 @ 19.04.02 13:35

void bubbleSort (float *record, int N)
{
for (int i = N; i > 1; i--)
for (int j = 1; j < i; j++)
if (record[j-1 > record[j]) {
record[j-1]^=record[j];
record[j] ^=record[j-1];
record[j-1]^=record[j];
}
}

Det er bare en bubblesort rutine jeg fyrede af.... det emd XOR ( ^ ) er et gammelt swarp trick, som var godt på ældre processorere... det var faktisk bare for at spille smart :)) hehe... der kunne lige så godt have stået :

void bubbleSort (float *record, int N)
{
for (int i = N; i > 1; i--)
for (int j = 1; j < i; j++)
if (record[j-1 > record[j]) {
float temp =record[j];
record[j]=record[j-1];
record[j-1]=temp;
}
}

virker på samme måde...

MVH Daniel, og go weekend



t