Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 10

//Bubble Sort

#include <stdio.h>
#define N 20
int bubble(int n);
int i,j,A[N];
main()
{
int jml;
printf("\t METODE BUBBLE SORT \n\n");
printf("Masukkan jumlah bilangan: ");
scanf("%d",&jml);
printf("\n");
// input data
for (i=0;i<jml;i++)
{
printf("Bilangan ke %d : ",i+1);
scanf("%d",&A[i]);
}
printf("\n");
// mengurutkan data
bubble(jml);
// menampilkan data
printf("Data yang sudah terurut : \n");
for (i=0;i<jml;i++)
{
printf("%d\n",A[i]);

}
}
// fungsi bubble
int bubble(int n)
{
int temp;
for (i=1;i<=n-1;i++)
{
for (j=i;j<n;j++)
{
if (A[i-1]>A[j])
{
temp = A[i-1];
A[i-1] = A[j];
A[j] = temp;
}
}
}
}

//marge sort
#include <stdio.h>

int total,data[10],salin[10];
void input(){
printf("\t METODE MERGE SORT \n\n");
printf("masukkan jumlah bilangan = ");scanf("%d",&total);

for(int a=0;a<total;a++){
printf("bilangan ke %d = ",a+1);scanf("%d",&data[a]);

}
}

void merge(int salin[],int lowptr,int highptr,int upperbound){


int x=0;
int lowerbound=lowptr;
int mid=highptr-1;
int n=upperbound-lowerbound+1;
while(lowptr<=mid && highptr<=upperbound){
if(data[lowptr]<data[highptr]){
salin[x++]=data[lowptr++];
}
else{
salin[x++]=data[highptr++];
}
while(lowptr<=mid){
salin[x++]=data[lowptr++];
}
while(highptr<=upperbound){
salin[x++]=data[highptr++];
}
for(int a=0;a<n;a++){
data[lowerbound+a]=salin[a];
}

void devide(int salin[],int kiri,int kanan){


if(kiri<kanan){
int mid=(kiri+kanan)/2;
devide(salin,kiri,mid);
devide(salin,mid+1,kanan);
merge(salin,kiri,mid+1,kanan);
}
}

void sort(){
devide(salin,0,total-1);
}

void view(){
for(int a=0;a<total;a++){
printf("%d ",data[a]);
}
printf("\n");
}

int main(){
input();
printf("sebelum di- sorting\n");
view();

sort();
printf("sesudah di- sorting\n");
view();
}

//Quick Sort
#include <stdio.h>
void quickSort( int[], int, int);

int partition( int[], int, int);

int total;
int main()
{
int total;
int a[1000];
int i;
printf("\t METODE QUICK SORT \n\n");
printf("masukkan jumlah bilangan = ");scanf("%d",&total);

for(i=0;i<total;i++){
printf("bilangan ke %d = ",i+1);scanf("%d",&a[i]);
}

printf("\n\nsebelum Di- sorting: ");


for(i = 0; i < total; ++i)
printf(" %d ", a[i]);

quickSort( a, 0, total-1);

printf("\n\nsesudah Di- sorting: ");


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

void quickSort( int a[], int l, int r)


{
int j;

if( l < r )
{
// divide and conquer
j = partition( a, l, r);
quickSort( a, l, j-1);
quickSort( a, j+1, r);
}

int partition( int a[], int l, int r) {


int pivot, i, j, t;
pivot = a[l];
i = l; j = r+1;

while( 1)
{
do ++i; while( a[i] <= pivot && i <= r );
do --j; while( a[j] > pivot );
if( i >= j ) break;
t = a[i]; a[i] = a[j]; a[j] = t;

}
t = a[l]; a[l] = a[j]; a[j] = t;
return j;
}

Algoritma quicksort:
if (right > left) then

pivIdx

left

{pengambilan pivot point bisa apa saja / random}


pivNewIdx

partition (num,left,right,pivIdx)

quicksort(num, left, pivNewIdx-1)


quicksort(num, pivNewIdx+1,right)

num

You might also like