En algoritme (oldpersisk: Kharazmi) er en utvetydig og abstrakt beskrivelse af, hvordan en specifik type problem løses terminerende. En algoritme er en opskrift til at løse et problem af en bestemt type, som leverer en løsning uanset den konkrete problemsituations udseende. Et eksempel kunne være en præcis beskrivelse af, hvordan man sorterer et spil kort, uanset hvordan de enkelte kort ligger som udgangspunkt. Ordet er en forvanskning af Muhammad ibn Mūsā al-Khwārizmīs navn, han var en stor persisk matematiker.  Anvendelse Det ovenstående eksempel kan forekomme besværligt og mærkeligt til at forklare, hvordan man sorterer en stak kort. Men selvom det for et menneske er en intuitiv opgave, er en computer nødt til at få sine ordrer meget utvetydigt. Hvis man formulerer ovenstående algoritme i et programmeringssprog, vil programmet være istand til at sortere et (fiktivt) spil kort.  Sorteringsalgoritmer er meget anvendt eksempel på algoritmer, da de er eksemplariske og helt logiske af natur. Derudover bruges algoritmer også til optimeringsopgaver i planlægningen af f.eks. fly-ruter, skemalægning til skoler osv. Denne type algoritmer kaldes heuristikker. Kort kan der nævnes simuleret nedkøling og genetiske algoritmer, som er typer af heuristikker.  Man finder adskillige eksempler på algoritmer i vores hverdag. Madopskrifter, monteringsinstruktioner og brugsanvisninger kan betragtes som algoritmer. De er dog kun nogenlunde logisk opstillede, og de fleste har prøvet at skulle samle et møbel efter en instruktion, som er mangelfuld. Andre har forsøgt sig med madopskrifter, der går ud fra som en selvfølge, at f.eks. delalgoritmen "opbagning" er velkendt for alle. For brugsanvisninger (eksempelvis på pesticider) gælder der et ikke-håndhævet lovkrav om, at de skal være éntydige og umiddelbart forståelige.  Kompleksitet Beregningskompleksiteten af en algoritme beskriver hvor lang tid det teoretisk vil tage at løse et problem af en given størrelse. Man taler om at en algoritme kører i tid  for at løse en problem instans af størrelse . Det vil her sige at køretiden af algoritmen vil være kvadratisk afhængig af inddataens størrelse, groft sagt svarer det til at hvis du har dobbelt så mange kort der skal sorteres tager det 4 gange så lang tid. En simpel sorteringsalgoritme af kort, hvor man tager et kort ud af en blandet bunke og placerer det i en ordnet bunke vil køre i . Sorteringsalgoritmen nævnt foroven er noget mere avanceret og vil køre i  tid. Dette kunne svare til at dobbelt så mange kort ville tage 3 gange så lang tid at sortere (dette vil dog afhænge af mange faktorer, men forholdene er ikke urealistiske). Det er derfor en stor fordel at bruge mere effektive algoritmer, da det løser problemer hurtigere. Sorteringsalgoritmer vil normalt køre i polynomiel tid, det vil sige at deres køretid kan beskrives af et polynomium i deres inddatas størrelse, . Specielt svære problemer kan køre i eksponentiel tid, det kunne svare til at hvis du vil løse et problem af størrelse 21 i stedet for af størrelse 20, kan det tage dobbelt så lang tid. Køretiden eksploderer altså med større inddata. Den rejsende handelsmands problem er et eksempel på et sådant problem, disse kaldes også NP-hårde.