Code PTTKGT

//Cài đặt giải thuật Insertion Sort

public static void insertion_sort(int A[])

    {

        int temp,j;

        for (int i = 1; i <= A.length-1; i++)

        {

            temp = A[i];

            // Insert A[i] into the sorted sequence A[0..i-1]

            j = i - 1;

            while (j >= 0 && A[j] > temp)

            {

                A[j+1] = A[j];

                j = j - 1;

            }

            A[j+1] = temp;

        }

    }

//main function

public static void main(String[] args) {

        int A[] = {5, 2, 10, 100, 25, 40, 250, 1000, 60, 500};

        insertion_sort(A);

        for(int i = 0; i<A.length; i++)

            System.out.print(A[i]+" ");

    }

//==============================^v^v^v^v^v^v===================================

//Cài đặt giải thuật Selection sort

public class SelectionSort {

    // Sort by descending

    public static void sort(int[] array) {

        for (int i = 0; i < array.length; i++) {

            int max = array[i]; // Lưu phần tử lớn nhất

            int index = i; // lưu vị trí chứa phần tử lớn nhất

            for (int j = i + 1; j < array.length; j++) {

                if(max < array[j]){

                    max = array[j];

                    index = j;

                }

            }

            // Nếu chỉ số đã thay đổi, ta sẽ hoán vị

            if(index != i){

                int temp = array[i];

                array[i] = array[index];

                array[index] = temp;

            }

        }

    }

}

//==============================^v^v^v^v^v^v===================================

//Cài đặt giải thuật Buble sort

for(int i = 0; i< array.length; i++){

            for (int j = array.length - 1; j > 0; j--) {

               if(array[j] < array[j-1]){

                   int temp = array[j];

                   array[j] = array[j-1];

                   array[j-1] = temp;

               }

            }   

        }

//==============================^v^v^v^v^v^v===================================

//Quick sort đệ quy

public int findPivot(int i, int j, int[] array) {

        if (array.length == 1) {

            return -1;

        }

        int k = i + 1;

        int pivot = array[i];

        while ((k <= j) && (array[k] == pivot)) {

            k++;

        }

        if (k > j) {

            return -1;

        }

        if (array[k] > pivot) {

            return k;

        } else {

            return i;

        }

    }

    // Tìm partition

    public int pointPartition(int i, int j, int pivotKey, int[] array) {

        int partition = -1;

        int L = i;

        int R = j;

        while (L <= R) {

            while (array[L] < pivotKey)

                L++;

            while (array[R] >= pivotKey)

                R--;

            if (L < R) {

                int temp = array[L];

                array[L] = array[R];

                array[R] = temp;

            }

        }

        partition = L;

        return partition;

    }

   // Sắp xếp

    public void quickSort(int i, int j, int[] array) {

        int pivot = findPivot(i, j, array);

        if (pivot == -1)

            return;

        int partition = pointPartition(i, j, array[pivot], array);

        quickSort(i, partition - 1, array);

        quickSort(partition, j, array);

    }

   // Test:

  quickSort(0, array.length - 1, array);

//==============================^v^v^v^v^v^v===================================

//Quick sort không đệ quy

public static void Swap(int i, int j, int[] a)

    {

        int mid;

        mid=a[i];

        a[i]=a[j];

        a[j]=mid;

    } 

 public static void Quick(int a[],int Left,int Right)

    {

        int i,j,mid;

        i=Left;

        j=Right;

        mid=a[(int)(Left+Right)/2];

        do

        {

            while(a[i]<mid && i<Right)i++;

            while(a[j]>mid && j>Left)j--;

            if(i<=j)

            {

                Swap(i,j,a);

                i++;

                j--;

            }

        } while (i<=j);

        if (Left<j)Quick(a,Left,j);

        if(i<Right)Quick(a,i,Right);

    } 

public static void QuickSort(int a[],int n)

    {

        Quick(a,0,n-1);

    } 

//==============================^v^v^v^v^v^v===================================

//Cài đặt giải thuật Sequential Search

public static int sequential_search(int A[], int x)

    {

        int i = 0;

        while (i <= A.length-1 && A[i] != x)

            i = i + 1;

        if (i == A.length) return -1;

        return i;       

    }

//main function

public static void main(String[] args) {

        int A[] = {5, 2, 10, 100, 25, 40, 250, 1000, 60, 500};

        int k = 1000;

        System.out.println(sequential_search(A,k));       

    }

//==============================^v^v^v^v^v^v===================================

//Cài đặt giải thuật tìm mẫu lặp lại nhiều lần nhất trong chuỗi thời gian

public static void find_motif (int T[], int n, int R)

    {

        int best_count = 0;

        int best_loc = -1;

        ArrayList index_list = new ArrayList();

        for (int i=0; i<=T.length-n; i++)

        {

            int count = 0;

            ArrayList temp = new ArrayList();

            for (int j=0; j<=T.length-n; j++)

            {

                if (non_trival_match(T,i,j,n,R))

                {

                    count++;

                    temp.add(j);

                }

            }

            if (count > best_count)

            {

                best_count = count;

                best_loc = i;

                index_list = temp;

            }

        }   

        System.out.println(best_count+" "+best_loc);

        for (int c = 0; c < index_list.size(); c++)       

            System.out.print(index_list.get(c)+" ");   

    }

    public static boolean non_trival_match(int T[], int l, int u, int n, int R)

    {

        if (Math.abs(l-u) >= R)

        {

            int count = 0;

            while (count < n)

            {

                if (T[l+count] != T[u+count])

                    return false;

                count++;

            }

            return true;

        }

        else

            return false;

    }

    public static void main(String[] args) {

        int T[] = {1,2,3,0,1,2,3,7,8,1,2,3,4,1,2,3,1,2,3};

        find_motif (T, 3, 2);

    }

//==============================^v^v^v^v^v^v===================================   

//Cài đặt giải thuật liệt kê các dãy nhị phân có độ dài n

public static void main(String[] args)

{

        Scanner in = new Scanner(System.in);

        int n = in.nextInt();

        int x[] = new int[n];

        for (i = 0; i < n; i++)

            x[i] = 0;

        do

        {

            for (i = 0; i < n; i++)

                System.out.print(x[i]);

            System.out.println();

            i = n - 1;

            while (i >= 0 && x[i] == 1)

                i = i - 1;

            if (i >= 0)

            {

                  x[i] = 1;

                  for (int j = i+1; j < n; j++)

                      x[j] = 0;

            }

        }

        while (i >= 0);

}

//==============================^v^v^v^v^v^v===================================   

//Cho 2 chuỗi ký tự có độ dài khác nhau. Hãy tìm tất cả các vị trí xuất hiện của chuỗi ngắn trong chuỗi dài (nếu có).

import java.util.*;

public class bai6 {

    public static void main(String[] args) {

        Scanner scanner=new Scanner(System.in);

        String s1,s2,kq;kq="";

        System.out.print("nhap chuoi 1:");;

        s1=scanner.nextLine();

        System.out.print("nhap chuoi 2:");;

        s2=scanner.nextLine();

        int i=0,length=s1.length()-s2.length()+1;

        while(i<length)

        {

            int vitri=s1.indexOf(s2,i);

            if(vitri<0)break;

            i=vitri+1;

            kq=kq+i+" ";

        }

        System.out.printf("vt chuoi '%s' trong chuoi '%s' la: %s",s2,s1,kq);

    }

}

//==============================^v^v^v^v^v^v===================================   

//Nhập vào danh sách n tên người. Liệt kê tất cả các cách chọn ra đúng k người trong số n người đó.

import java.util.*;

public class bai6 {

    public static void lietketohop(String[] arrs, int k,int i,String s)

    {

        if(k==0)System.out.println(s);

        else

        {

            int length= arrs.length;

            if(k>length-i)return;

            for(i=0;i<length;i++)

            {

                lietketohop(arrs,k-1,i+1,s+" "+arrs[i]);

            }

        }

    }

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        System.out.print("nhap so nguoi:");

        //arrs[0]=scanner.nextLine();

        Scanner scanner=new Scanner(System.in);

        int n=Integer.parseInt(scanner.nextLine());

        String[] arrs=new String[n];

        arrs[0]=scanner.nextLine();

        for(int i=0;i<n;i++)

        {

            System.out.printf("nguoi thu %d",i+1);

            arrs[i]=scanner.nextLine();

        }

        System.out.print("nhap so nguoi can chon:");

        int k=Integer.parseInt(scanner.nextLine());

        lietketohop(arrs,k,0," ");

    }

}

//==============================^v^v^v^v^v^v===================================   

//Liệt kê tất cả các tập con của tập {1, 2, …, n}. Có thể dùng phương pháp liệt kê tập con hoặc dùng phương pháp liệt kê tất cả các dãy nhị phân. Mỗi số 1 trong dãy nhị phân tương ứng với một phần tử được chọn trong tập. Ví dụ với tập {1, 2, 3, 4} thì dãy nhị phân 1010 sẽ tương ứng với tập con {1, 3}. Hãy viết chương trình in ra tất cả các tập con của {1, 2, …, n} theo hai phương pháp.

import java.util.*;

public class bai6 {

    /**

     * @param args

     */

    public static void lietketohop(String[] arrs, int k,int i,String s)

    {

        if(k==0)System.out.println(s);

        else

        {

            int length= arrs.length;

            if(k>length-i)return;

            for(i=0;i<length;i++)

            {

                lietketohop(arrs,k-1,i+1,s+" "+arrs[i]);

            }

        }

    }

    public static void main(String[] args) {

        System.out.print("nhap so phan tu cua tap hop:");

        Scanner scanner=new Scanner(System.in);

        int n=Integer.parseInt(scanner.nextLine());

        String[] arrs=new String[n];

        //arrs[0]=scanner.nextLine();

        for(int i=0;i<n;i++)

        {

            System.out.printf("so thu %d",i+1);

            arrs[i]=scanner.nextLine();

        }

        System.out.println("{"+"Null"+"}");

        for(int j=1;j<=n;j++)

        {   

            lietketohop(arrs,j,0," ");

        }

    }

}

//==============================^v^v^v^v^v^v===================================   

//Cài đặt giải thuật tìm nhị phân

public class BinarySearch {

    public static int bin_search (int A[], int key)

    {

        int left = 0;

        int right = A.length-1;

        int mid;

        while (left <= right)

        {

            mid = (left + right) / 2;

            if (key == A[mid])

                return mid;

            else if (key < A[mid])

                right = mid - 1;

            else

                left = mid + 1;

        }

        return -1;

    }

    public static void main(String[] args) {

        int A[] = {1, 2, 4, 8, 15, 50, 100};

        System.out.println(bin_search(A,15));

    }

}

//==============================^v^v^v^v^v^v===================================   

//Cài đặt giải thuật Merge Sort

public class MergeSort {

    public static void merge_sort (int A[], int p, int r)

    {

        if (p < r)

        {

            int q = (p + r) / 2;

            merge_sort(A, p, q);

            merge_sort(A, q+1, r);

            merge(A, p, q, r);

        }

    }

    private static void merge(int A[], int p, int q, int r)

    {

        int n1 = q - p + 1;   

        int n2 = r - q;

        int i, j, k;

        int L[] = new int[n1+1];

        int R[] = new int[n2+1];

        for (i = 0; i < n1; i++)

            L[i] = A[p+i];

        for (j = 0; j < n2; j++)

            R[j] = A[q+j+1];

        L[n1] = Integer.MAX_VALUE;

        R[n2] = Integer.MAX_VALUE;

        i = 0;

        j = 0;

        for (k = p; k <= r; k++)

        {

            if (L[i] <= R[j])

            {

                A[k] = L[i];

                i++;

            }

            else

            {

                A[k] = R[j];

                j++;

            }

        }

    }

    public static void main(String[] args) {

        int A[] = {3, 5, 1, 100, 20, 45, 75, 50, 8, 500, 1};

        merge_sort(A,0,A.length-1);

        for (int i = 0; i < A.length; i++)

            System.out.print(A[i]+" ");

    }

}

//==============================^v^v^v^v^v^v===================================   

//Cho một tập hợp S có n số nguyên và số nguyên x. Tìm xem có tồn tại 2 phần tử nào trong S có tổng bằng x hay không.

import java.util.*;

public class hai {

    /**

     * @param args

     */

    public static int giaithua(int n)

    {

        int k = 1;

        for(int i = 1 ; i <= n ; i++)

        {

            k = k * i;

        }

        return k;

    }

    public static void main(String[] args)

    {

        // TODO Auto-generated method stub

        int a[]={1 , 3 , 5 , 2 , 4 , 6 ,4 };

        int t,x,kq=0,i=0,k=0,tang=1,dem=0;

        System.out.print("Nhap vao x = ");

        Scanner in = new Scanner(System.in);

        x = in.nextInt();

        t = (giaithua(a.length))/(2*giaithua(a.length-2));

        System.out.println(t);   

        int b[] = new int[t];

        int c[] = new int[t];

        while(i < t)

        {

            kq = a[k] + a[k+tang];

            if(kq == x)

            {

                b[dem] = a[k];

                c[dem] = a[k+tang];

                dem++;

            }

            i++;

            tang++;

            if(k+tang==a.length)

            {

                k++;

                tang=1;

            }

        }

        for(i = 0 ; i < dem ; i++)

        {

            System.out.print(b[i]+" ");

            System.out.println(c[i]);

        }

    }

}

//==============================^v^v^v^v^v^v===================================   

//Bài 5+6: Cài đặt giải thuật Depth-First-Search + Breadth-First-Search giải quyết bài toán duyệt tất cả các đỉnh có thể đến được từ một đỉnh xuất phát nào đó.

import java.io.BufferedReader;

import java.lang.reflect.Array;

import java.util.Queue;

import java.util.Scanner;

public class bt {

    public static void matran(Boolean[][] a)

    {

        for(int i=0;i<a.length;i++)

        {

            for(int j=0;j<a.length;j++)

            {

                if(i==j)

                    a[i][j]=true;

                else

                a[i][j]=false;

            }

        }

    }

    public static void xuat(Boolean[][] a)

    {

        for(int i=0;i<a.length;i++)

        {

            for(int j=0;j<a.length;j++)

            {

                System.out.print(a[i][j] + "\t");

            }

            System.out.println();

        }

    }

    public static void nhapmatran(int i,int j,Boolean[][] a)

    {

        a[i][j]=true;

        a[j][i]=true;

    }

    public static void DFS(int u,int n,Boolean[][] a,Boolean[] free)

    {

        for(int v=0;v<n;v++)

        {

            if(a[u][v]==true && free[v]==false)

            {   

                System.out.print(v + "\t");

                free[v]=true;

                DFS(v,n,a,free);

            }

        }

    }

    public static void brFS(int s,int n,Boolean[][] a,Boolean[] free)

    {

        int front=0,rear=0;

        int chua[]=new int[n];

        chua[0]=s;

        do{

            int u=chua[front];

            front++;

            for(int v=0;v<n;v++)

            {

                if(a[u][v]==true && free[v]==false)

                {

                    System.out.print(v + "\t");

                    free[v]=true;

                    rear++;

                    chua[rear]=v;

                }

            }

        }while(rear>=front);

    }

    public static void main(String[] args) {

        Scanner in=new Scanner(System.in);

        int n=in.nextInt();

        Boolean[][] A=new Boolean[n][n];

        matran(A);

        xuat(A);

        int i,j;

        do

        {

            System.out.println("nhap diem dau:");

            i=in.nextInt();

            System.out.println("nhap diem sau: ");

            j=in.nextInt();

            nhapmatran(i, j, A);

        }

        while(i!=0 || j!=0);

        xuat(A);

        Boolean free[]=new Boolean[n];

        for(int z=0;z<n;z++)

            free[z]=false;

        //DFS(0,n,A,free);

        brFS(0,n,A,free);

    }

}

//==============================^v^v^v^v^v^v===================================   

//Tính thời gian thực thi giải thuật

public static void main(String[] args) {

        int A[] = {1, 5, 2, 10, 100, 25, 40, 300, 250, 1000, 60, 500, 1000, 1};       

        long startTime = System.nanoTime();

        for (int count = 0; count < 100; count++)

            insertion_sort(A);

        long endTime = System.nanoTime();

        System.out.println(endTime - startTime);

}

Bạn đang đọc truyện trên: AzTruyen.Top

Tags: