Скачиваний:
26
Добавлен:
01.05.2014
Размер:
1.6 Кб
Скачать
// 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;
}

Соседние файлы в папке msvc
  • #
    01.05.20141.6 Кб26Lab1.cpp
  • #
    01.05.20144.51 Кб25Lab1.dsp
  • #
    01.05.2014533 б25Lab1.dsw
  • #
    01.05.201433.79 Кб25Lab1.ncb
  • #
    01.05.201448.64 Кб25Lab1.opt
  • #
    01.05.20141.31 Кб25Lab1.plg