Σημειώσεις δεύτερης εβδομάδας 1. Δυαδική αναζήτηση: /* BINARY SEARCH */ /* use sorted input */ #include <stdio.h> int main() { int c, first, last, middle, n, search, array[100]; printf("enter number of elements\n"); scanf("%d",&n); printf("enter %d integers\n", n); for ( c = 0 ; c < n ; c++ ) scanf("%d",&array[c]); printf("enter value to find\n"); scanf("%d",&search); first = 0; last = n 1; middle = (first+last)/2; while(first<=last) { if(array[middle]<search) first = middle + 1; else if(array[middle]==search) { printf("%d found at location %d.\n", search, middle+1); break; else last = middle 1; middle = (first + last)/2; if(first>last) printf("not found! %d is not present in the list.\n", search); return 0; Σημειώσεις Εργαστηρίου Δομών και Αλγορίθμων 1 costis@teicrete.gr
2. Ταξινόμηση με φυσαλίδα: #include <stdio.h> #define SIZE 10 int main(void) { int a[size] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 ; printf( "Data items in original order\n" ); for(i=0;i<size;i++) printf("%4d",a[i]); for (pass=1; pass<size;pass++) for (i=0;i<size 1;i++) if(a[i]>a[i+1]) { hold=a[i]; a[i]=a[i+1]; a[i+1]=hold; printf("\ndata items in ascending order\n"); for (i=0;i<size;i++) printf("%4d",a[i]); printf("\n"); return 0; Πρώτη Εργασία για το σπίτι: 1. Να αντικατασταθούν οι τρεις γραμμές του κώδικα της εσωτερικής επανάληψης του αλγόριθμου φυσαλίδας που αντιμεταθέτουν το περιεχόμενα από δύο κελιά του πίνακα, με κλήση συνάρτησης swap. 2. Αφού διαβάσετε στις σημειώσεις της Θεωρίας του κύριου Ξεζωνάκη τους δύο τρόπους με τους οποίους περνάμε πίνακα σε συνάρτηση στη γλώσσα C, επιλέξτε έναν και μετατρέψετε τον αλγόριθμο ταξινόμησης σε συνάρτηση. 3. Να τροποποιήσετε την δυαδική αναζήτηση έτσι, ώστε: α. να επιτρέπει πολλαπλές αναζητήσεις στον πίνακα και να σταματάει όταν ζητήσουμε το 0. β. να ελέγχει αν ο πίνακας τιμών που δώσαμε είναι ταξινομημένος ήδη ή όχι και αν όχι να καλεί την συνάρτηση ταξινόμησης που κατασκευάσατε στην ερώτηση 2. Σημειώσεις Εργαστηρίου Δομών και Αλγορίθμων 2 costis@teicrete.gr
Για όποιον προτιμά να χρησιμοποιήσει Java: 1. Binary Search σε Java: import java.util.scanner; public class BinarySearch { int c, first, last, middle, n, search; int[] array; array=new int[100]; System.out.println("Enter number of elements"); Scanner sc = new Scanner(System.in); n = sc.nextint(); System.out.printf("Enter %d integers\n", n); for (c = 0; c < n; c++) array[c] = sc.nextint(); System.out.println("Enter value to find"); search = sc.nextint(); first = 0; last = n 1; middle = (first + last) / 2; while (first <= last) { if (array[middle] < search) first = middle + 1; else if (array[middle] == search) { System.out.printf("%d found at location %d.\n", search, middle + 1); break; else last = middle 1; middle = (first + last) / 2; if (first > last) System.out.printf("Not found! %d is not present in the list.\n", search); Σημειώσεις Εργαστηρίου Δομών και Αλγορίθμων 3 costis@teicrete.gr
2. Bubble Sort χωρίς μέθοδο swap σε Java: public class Bubblesort { int[] a = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37; System.out.println("Data items in original order\n"); for (pass = 1; pass < SIZE; pass++) { for (i = 0; i < SIZE 1; i++) { if (a[i] > a[i + 1]) { hold = a[i]; a[i] = a[i + 1]; a[i + 1] = hold; 3. Bubble Sort με μέθοδο swap σε Java: public class Bubblesort1 { int[] a = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37; System.out.println("Data items in original order"); for (pass = 1; pass < SIZE; pass++) for (i = 0; i < SIZE 1; i++) if (a[i] > a[i + 1]) swap(a,i,i+1); // ARRAYS PASS BY REFERENCE static void swap(int arr[], int a, int b) { hold=arr[a]; arr[a]=arr[b]; arr[b]=hold; Σημειώσεις Εργαστηρίου Δομών και Αλγορίθμων 4 costis@teicrete.gr
4. Η Java έχει βέβαια και έτοιμη Array.sort() μέθοδο. (Για την άσκηση δεν πρέπει να χρησιμοποιηθεί) import java.util.arrays; public class AutoSort { int[] a = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37; System.out.println("Data items in original order\n"); { /* Java Util Arrays Sort */ Arrays.sort(a); { Σημειώσεις Εργαστηρίου Δομών και Αλγορίθμων 5 costis@teicrete.gr