Java, C++ qsort, countsort Можно ли сделать код еще быстрее?
ВНИМАНИЕ: Java код ниже чем С++ код!
// Swap two elements - Utility function void swap(int* a, int* b) { int t = *a; *a = *b; *b = t; } // partition the array using last element as pivot int partition (int arr[], int low, int high) { int pivot = arr[high]; // pivot int i = (low - 1); for (int j = low; j <= high- 1; j++) { //if current element is smaller than pivot, increment the low element //swap elements at i and j if (arr[j] <= pivot) { i++; // increment index of smaller element swap(&arr[i], &arr[j]); } } swap(&arr[i + 1], &arr[high]); return (i + 1); } //quicksort algorithm void quickSort(int arr[], int low, int high) { if (low < high) { //partition the array int pivot = partition(arr, low, high); //sort the sub arrays independently quickSort(arr, low, pivot - 1); quickSort(arr, pivot + 1, high); } } int main() { int arr[] = {12,23,3,43,51,35,19,45}; int n = sizeof(arr)/sizeof(arr[0]); cout<<"Input array"<<endl; displayArray(arr,n); cout<<endl; quickSort(arr, 0, n-1); cout<<"Array sorted with quick sort"<<endl; displayArray(arr,n); return 0; }
Java. Сортировка подсчетом. Как повысить быстродействие?
Code review.
Озвучьте, плиз, ваше мнение об этом коде. Чем он плох. Чем хорош.
Программа сортирует 1 млн. целых чисел двумя разными способами. Хотелось бы сделать побыстрее.
import java.util.ArrayList; import java.util.Collections; import java.util.Hashtable; import java.util.Random; public class Test { private static final int MAX_SORT_SIZE = 10000000; private static ArrayList<Integer> mysort(ArrayList<Integer> list) { Hashtable<Integer, Integer> ht = new Hashtable<Integer, Integer>(); for(int i=0;i<MAX_SORT_SIZE;i++) { int num = list.get(i); Integer value = ht.get(num); if(value==null) ht.put(num,num); else { ht.remove(num); ht.put(num,value+num); } } int n=0; ArrayList<Integer> res= new ArrayList<Integer>(); for(int i=0;i<MAX_SORT_SIZE;i++) { Object obj = ht.get(i) ; if(obj==null) continue; Integer value = new Integer((Integer)obj); if(value==i) { res.add(value); } else { ht.remove(i); ht.put(i,value-i); res.add(i); i--; } } return res; } public static int getRandomInt(int from, int excluded_border) { return new Random().nextInt(excluded_border)+from; } public static void main(String[] args) throws Exception { ArrayList<Integer> list = new ArrayList<Integer>(); ArrayList<Integer> list2 = new ArrayList<Integer>(); for(int i=0;i<MAX_SORT_SIZE;i++) { int n = getRandomInt(0,MAX_SORT_SIZE); list.add(n); list2.add(n); } long before = System.currentTimeMillis(); Collections.sort(list); long after = System.currentTimeMillis(); System.out.println("Time: "+(after-before)); for(int i=0;i<20;i++) { System.out.println(list.get(i)); } System.out.println("\n================================"); long before2 = System.currentTimeMillis(); list = mysort(list2); long after2 = System.currentTimeMillis(); System.out.println("Time mysort: "+(after2-before2)); for(int i=0;i<20;i++) { System.out.println(list.get(i)); } System.out.println("\n================================"); } }
166 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів