/**********************************************
--------------------------------
QUICK SORT ALGORITHM
--------------------------------
Partition(a,p,q)
1. set i = p
2. for j from p + 1 to q, Repeat step 3 and 4
3. if a[j] <= a[p],increase i
4. Swap a[i] and a[j]
5. swap a[i] and a[p]
6. return i
Quick.Sort(a,p,q)
1. if p < q, Repeat step 2,3 and 4
2. set r = partition(a,p,q)
3. call recursively QuickSort(a,p,r - 1)
4. call recursively QuickSort(a,r + 1,q)
5. return
***********************************************/
#include "iostream.h"
#include "conio.h"
void swap(int &a,int &b)
{
int temp = a;
a = b;
b = temp;
}
int partition(int a[],int p,int q)
{
int i = p;
for(int j = p + 1;j <= q;j++) //from Second element to Last
if(a[j] <= a[p]) //assign smaller element to Left of pivot
{
i++;
swap(a[i],a[j]);
}
swap(a[p],a[i]); //set Pivot
return i;
}
void QuickSort(int *a,int p,int q)
{
if(p < q)
{
int r = partition(a,p,q); //Find Pivot
QuickSort(a,p,r - 1); //sort Left Subarray
QuickSort(a,r + 1,q); //sort Right Subarray
}
}
int main()
{
int num[50],n;
cout << "How many numbers? ";
cin >> n;
cout << "\nEnter " << n << " Numbers\n";
for(int i = 0;i < n;i++)
cin >> num[i];
QuickSort(num,0,n - 1); //call function QuickSort with pivot at First
position
cout << endl;
for(int i = 0;i < n;i++)
cout << num[i] << ' ';
getch();
return 0;
}
OUTPUT
How many numbers? 10
Enter 10 Numbers
25 65 47 88 64 10 -98 0 35 6
-98 0 6 10 25 35 47 64 65 88
Download Original File
No comments:
Post a Comment