Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа №1 / CPP Version / msvc / Lab1
.cpp// Lab1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
void swap (float &p, float &q)
{
float hold;
hold = p;
p = q;
q = hold;
}
void quicksort(float x[], int n)
{
int left[20], right[20];
int i,j,sp,mid;
float pivot;
left[1] = 1;
right[1] = n;
sp = 1;
while (sp>0)
{
if (left[sp] >= right[sp])
{ sp = sp-1; }
else
{
i = left[sp];
j = right[sp];
pivot = x[j];
mid = (i+j) % 2;
if ((j-i)>5)
if (((x[mid]<pivot) && (x[mid]>x[i])) || ((x[mid]>pivot) && (x[mid]<x[i])))
swap(x[mid],x[j]);
else
if (((x[i]<x[mid]) && (x[i]>pivot)) || ((x[i]>x[mid]) && (x[i]<pivot)))
swap(x[i],x[j]);
pivot = x[j];
while (i<j)
{
while (x[i]<pivot)
{ i = i+1; }
j = j-1;
while ((i<j) && (pivot<x[j]))
{ j = j-1; }
if (i<j)
{ swap(x[i],x[j]); }
} // while
j = right[sp]; // pivot to i
swap(x[i],x[j]);
if (i-left[sp]>=right[sp]-i)
{ // put shorter part first
left[sp+1] = left[sp];
right[sp+1] = i-1;
left[sp] = i+1;
}
else
{
left[sp+1] = i+1;
right[sp+1] = right[sp];
right[sp] = i-1;
}
sp = sp+1; // push stack
} // if
} // while
}
int main()
{
float array[] = {0, 1, 3, 2, 12, 5, 9, 7, 14};
for (int k = 1; k < 9; k++)
{ printf ("%f\n", array[k]); }
printf ("================\n");
quicksort(array, 8);
for (k = 1; k < 9; k++)
{ printf ("%f\n", array[k]); }
return 0;
}