Здравствуйте, anton_t, Вы писали:
_>Здравствуйте, rjikzy, Вы писали:
R>>Абсолютно согласен. Я сравнивал производительность сортировок Java и С, так вот, в среднем мои замеры показали что Java отстает от С на 10-12 процентов на массивах различной длинны (от 1000 до 100000). Если верить этому тесту, то .NET выполнит те же операции на 38%-40%, что само по себе абсурд. Так что все это провокация, это нереально.
_>Program.cs:
_>_>using System;
_>using System.Collections.Generic;
_>using System.Text;
_>namespace SortSpeed
_>{
_> class Program
_> {
_> static void Sort(double[] arr)
_> {
_> int len = arr.Length;
_> bool notSorted = true;
_> double tmp;
_> while (notSorted) {
_> notSorted = false;
_> for (int i = 0; i < len - 1; ++i) {
_> if (arr[i] > arr[i + 1]) {
_> tmp = arr[i];
_> arr[i] = arr[i + 1];
_> arr[i + 1] = tmp;
_> notSorted = true;
_> }
_> }
_> }
_> }
_> static void Main(string[] args)
_> {
_> int len = 10000;
_> try {
_> len = int.Parse(args[0]);
_> } catch (Exception ex){
_> }
_> double[] arr = new double[len];
_> Random rand = new Random();
_> for (int i = 0; i < len; i++) {
_> arr[i] = rand.NextDouble();
_> }
_> DateTime d1 = DateTime.Now;
_> Sort(arr);
_> DateTime d2 = DateTime.Now;
_> Console.Out.WriteLine(string.Format("{0} - {1}", len, (d2 - d1).ToString()));
_> }
_> }
_>}
_>
_>test.java:
_>_>import java.util.Date;
_>import java.util.Random;
_>import java.text.SimpleDateFormat;
_>public class test
_>{
_> public static void main(String[] args)
_> {
_> int len = 10000;
_> try {
_> len = Integer.parseInt(args[0]);
_> } catch (Exception ex){
_> }
_> double[] arr = new double[len];
_> Random rand = new Random();
_> for (int i = 0; i < len; i++) {
_> arr[i] = rand.nextDouble();
_> }
_> Date d1 = new Date();
_> Sort(arr);
_> Date d2 = new Date();
_> Date diff = new Date(d2.getTime() - d1.getTime());
_> SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss.SSSSSSS");
_> System.out.println(len + " - " + format.format(diff));
_> }
_> static void Sort(double[] arr)
_> {
_> int len = arr.length;
_> boolean notSorted = true;
_> double tmp;
_> while (notSorted) {
_> notSorted = false;
_> for (int i = 0; i < len - 1; ++i) {
_> if (arr[i] > arr[i + 1]) {
_> tmp = arr[i];
_> arr[i] = arr[i + 1];
_> arr[i + 1] = tmp;
_> notSorted = true;
_> }
_> }
_> }
_> }
_>}
_>
_>Эксперимент:
_>_>D:\home\tests\SortSpeed>java test 40000
_>40000 - 07:00:20.0000453
_>D:\home\tests\SortSpeed>sortspeed 40000
_>40000 - 00:00:14.2655337
_>
_>Я не специалист в Java, поэтому если уто-нибудь укажет, как побороть 7 часов, откуда-то вылезающие в явовской программе, то буду благодарен.
_>А так в общем видна разница в 30%.
Яве необходимо "разогрется". Попробуйте перед началом сортировки "прогнать" несколько раз ее в цикле, а затем выполнить замер.