(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
[[Complexities_of_Basic_Sorting_Algorithms |Complexity and no. of swaps required]]
 
[[Complexities_of_Basic_Sorting_Algorithms |Complexity and no. of swaps required]]
 
+
<metadesc>Quick sort program in C</metadesc>
<syntaxhighlight lang="c">
+
<syntaxhighlight lang="c" name="quicksort">
  
 
#include <stdio.h>
 
#include <stdio.h>
Line 15: Line 15:
 
{
 
{
 
int i, j, p;
 
int i, j, p;
if(start >= end-1)
+
if(start >= end)
{
 
 
return;
 
return;
}
+
 
i = p = start, j = end-1;
+
i = p = start, j = end;
while(i < j)
+
while(i < j)// Finds the no. of elements in the array < a[p] from the beginning and swaps with the no. of elements in the array greater than a[p] from the end
 
{
 
{
while(a[i] <= a[p] && i < end-1)
+
while(a[i] <= a[p] && i < end)
 
i++;
 
i++;
while(a[j] > a[p])
+
while(a[j] > a[p]) //( > ensures j never comes equal to p)
 
j--;
 
j--;
 
if(i < j)
 
if(i < j)
{
 
 
swap(&a[i], &a[j]);
 
swap(&a[i], &a[j]);
}
 
 
}
 
}
 
swap(&a[j], &a[p]);
 
swap(&a[j], &a[p]);
qsort(a, start,  j);
+
qsort(a, start,  j-1);
 
qsort(a,  j + 1, end);
 
qsort(a,  j + 1, end);
 
}
 
}
Line 40: Line 37:
 
int i;
 
int i;
 
for(i = 0; i < n; i++)
 
for(i = 0; i < n; i++)
{
 
 
printf("%d ",a[i]);
 
printf("%d ",a[i]);
}
 
 
}
 
}
  
Line 58: Line 53:
 
sscanf(str, "%d", &num[i++]);  
 
sscanf(str, "%d", &num[i++]);  
 
}
 
}
qsort(num, 0, i);
+
qsort(num, 0, i-1);
 
printf("The sorted numbers are: ");
 
printf("The sorted numbers are: ");
 
printArray(num, i);
 
printArray(num, i);
 
printf("\n");
 
printf("\n");
 +
 +
        return 0;
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 68: Line 65:
 
{{Template:FBD}}
 
{{Template:FBD}}
  
[[Category: Code]]
+
[[Category: Arrays]]
 +
[[Category:Sorting]]

Latest revision as of 11:25, 22 July 2014

Complexity and no. of swaps required

<syntaxhighlight lang="c" name="quicksort">

  1. include <stdio.h>

void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }

void qsort(int a[], int start, int end) { int i, j, p; if(start >= end) return;

i = p = start, j = end; while(i < j)// Finds the no. of elements in the array < a[p] from the beginning and swaps with the no. of elements in the array greater than a[p] from the end { while(a[i] <= a[p] && i < end) i++; while(a[j] > a[p]) //( > ensures j never comes equal to p) j--; if(i < j) swap(&a[i], &a[j]); } swap(&a[j], &a[p]); qsort(a, start, j-1); qsort(a, j + 1, end); }

void printArray(int a[], int n) { int i; for(i = 0; i < n; i++) printf("%d ",a[i]); }

int main() { char str[20]; int num[100]; int i = 0; printf("Enter the numbers to sort (. to stop): "); while(1) { scanf("%s",str); if(str[0] == '.') break; sscanf(str, "%d", &num[i++]); } qsort(num, 0, i-1); printf("The sorted numbers are: "); printArray(num, i); printf("\n");

       return 0;

} </syntaxhighlight>




blog comments powered by Disqus

Complexity and no. of swaps required

<syntaxhighlight lang="c">

  1. include <stdio.h>

void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }

void qsort(int a[], int start, int end) { int i, j, p; if(start >= end-1) { return; } i = p = start, j = end-1; while(i < j) { while(a[i] <= a[p] && i < end-1) i++; while(a[j] > a[p]) j--; if(i < j) { swap(&a[i], &a[j]); } } swap(&a[j], &a[p]); qsort(a, start, j); qsort(a, j + 1, end); }

void printArray(int a[], int n) { int i; for(i = 0; i < n; i++) { printf("%d ",a[i]); } }

int main() { char str[20]; int num[100]; int i = 0; printf("Enter the numbers to sort (. to stop): "); while(1) { scanf("%s",str); if(str[0] == '.') break; sscanf(str, "%d", &num[i++]); } qsort(num, 0, i); printf("The sorted numbers are: "); printArray(num, i); printf("\n"); } </syntaxhighlight>




blog comments powered by Disqus