voidinsertionSort(int arr[]){ for(int i = 0 ; i < 6 ; i ++){ int key = arr[i]; int j = i - 1; while(j >= 0 && arr[j] > key){ arr[j + 1] = arr[j]; j --; } arr[j + 1] = key; } }
快速排序
时间复杂度为 O(nlogn)
1 2 3 4 5 6 7 8 9 10 11 12 13
voidquick_sort(int q[], int l, int r) { if (l >= r) return;
int i = l - 1, j = r + 1, x = q[l + r >> 1]; while (i < j) { do i ++ ; while (q[i] < x); do j -- ; while (q[j] > x); if (i < j) swap(q[i], q[j]); } quick_sort(q, l, j), quick_sort(q, j + 1, r); }
import java.util.*; import java.io.*; publicclassMain{ privatestaticint p[] = newint[100010]; //声明父节点; publicstaticvoidmain(String [] args)throws IOException { Scanner in = new Scanner(new BufferedInputStream(System.in)); BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out)); int n = in.nextInt(); for(int i = 1 ; i <= n ; i ++)p[i] = i; int m = in.nextInt(); while(m -- != 0){ String op = in.next(); if(op.equals("M")){ int a = in.nextInt(); int b = in.nextInt(); p[find(a)] = find(b); }else{ int a = in.nextInt(); int b = in.nextInt(); if(find(a) == find(b))log.write("Yes\n"); else log.write("No\n"); } } log.flush(); log.close(); } //查找x节点的父亲 publicstaticintfind(int x){ if(p[x] != x) p[x] = find(p[x]); return p[x]; } }
publicstaticvoidmain(String[] args)throws IOException { Scanner in = new Scanner(new BufferedInputStream(System.in)); BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out)); int n = in.nextInt(); int m = in.nextInt(); for(int i = 1 ; i <= n ; i ++){ p[i] = i; size[i] = 1; } while(m -- != 0){ String op = in.next(); if(op.equals("C")){
int a = in.nextInt(); int b = in.nextInt(); if(find(a) == find(b)) continue; size[find(b)] += size[find(a)]; p[find(a)] = b; }elseif(op.equals("Q1")){ int a = in.nextInt(); int b = in.nextInt(); if(find(a) == find(b))log.write("Yes\n"); else log.write("No\n"); }else{ int k = in.nextInt(); log.write(size[find(k)] + "\n"); } } log.flush(); log.close();