webForumDet fria alternativet

Sortering av array

5 svar · 730 visningar · startad av PatrikH

PatrikHMedlem sedan juli 200114 inlägg
#1

Hoppas någon har något förslag till detta...

Har en array med 26 "heltalsfack". Vad jag vill göra är att plocka ut de 8 största värdena samt att ha reda på vid vilket index respektive värde hittades.

Kanske ska göra det här med vektorer, men då jag aldrig har använt sådana förrut, så vore det smidigt om det gick att göra med hjälp av arrays.

BeatboxMedlem sedan okt. 20012 496 inlägg
#2

Du kan använda dig av Quiksort för att sortera arrayen.
Jag hittade en sida som beskriver detta bra. Kolla på animationen så ser du en visualisering av hur algoritmen fungerar

http://odin.ee.uwa.edu.au/~morris/Year2/PLDS210/qsort.html

// BeatBox

PeWMedlem sedan juni 20006 839 inlägg
#3

...Eller om du vill knacka kod och klura lite själv kan du använda den här funktionen:

void sort(int *t1,const int &len){
    bool changed;
	do{
		changed = false;

		for(int i=0;i<len-1;i++){
			if(t1[i] > t1[i+1]){
			    int temp = t1[i];
				t1[i]=t1[i+1];
				t1[i+1]=temp;
				changed = true;
			}
		}
	}while(changed);
}

Den sorterar en godtyckligt stor int array till stigande ordning. Bara att plocka ut de 8 sista talen efter sorteringen. Men den sorterar en array som redan finns så ska du behålla den arrayen intakt får du göra en arbetskopia först, vilket även kan användas om du ska hitta index (genom att t.ex jämföra fälten).

Grov pseudo för vidare implementering:

- kopiera arrayen
- sort(kopian,storleken)
- for (index;index<strlk;index++)
om kopian == arrayen : spara index

... ungefär :)

easMedlem sedan sep. 2001274 inlägg
#4

Bouble sort är enklast tycker jag.

Ett exempel:

#include <iostream>

using namespace std;

int main()
{
  int lista[5]={0, 3, 7, -2, 9},i ,x, y, temp;

  for (x=0; x<4; ++x) {
    for (i=0; i<4-x; ++i)
      if (lista[i] > lista[i+1]) {
        temp=lista[i];
        lista[i]=lista[i+1];
        lista[i+1]=temp;
      }

        cout<<x+1<<" =->   ";
        for (y=0; y<5; ++y) {
        if (lista[y] >= 0) cout<<" ";
        cout<<lista[y]<<" ";
        }
        cout<<endl;
  }

  return 0;
}
PatrikHMedlem sedan juli 200114 inlägg
#5

Tack!

Tack för alla förslag! Använde mig av PeW:s förslag och det fungerade utmärkt, Tack!

PeWMedlem sedan juni 20006 839 inlägg
#6

Bra... även min variant är en bubblesort ;)

Genererad på 392 ms · cache AV · v20260730165559-full.f96bc7eb