How can I make this better?
public int BubbleSortNonEfficient(int[] arr) {
int temp = 0;
int LoopCount = 0;
for(int write = 0; write < arr.Length; write++) {
for(int sort = 0; sort < arr.Length - 1; sort++) {
LoopCount++;
if(arr[sort] > arr[sort + 1]) {
temp = arr[sort + 1];
arr[sort + 1] = arr[sort];
arr[sort] = temp;
}
}
}
return LoopCount;
}
1 Answer 1
Your implementation will run in quadratic time in all cases. You can optimize here a bit:
public static int BubbleSort(int[] arr) {
int loopCount = 0;
for (int i = 1; i < arr.Length; ++i) {
bool swapped = false;
for (int j = 0; j < arr.Length - i; ++j) {
loopCount++;
if (arr[j] > arr[j + 1]) {
swapped = true;
int temp = arr [j];
arr [j] = arr[j + 1];
arr [j + 1] = temp;
}
}
if (!swapped) {
break;
}
}
return loopCount;
}
The above alternative will run faster whenever the input array is "presorted," i.e., exhibits a lot of order.
Declaring the sort as static
will allow the user to use your sort without actually instantiating the class it belongs to.
Last but not least: you can declare temp
in the body of the inner loop, since it affects nothing.
-
\$\begingroup\$ thanks but I want to count so I can see wich ones are better \$\endgroup\$Fire the Bullet– Fire the Bullet2016年09月28日 18:00:49 +00:00Commented Sep 28, 2016 at 18:00
-
\$\begingroup\$ @Moder Answer edited. \$\endgroup\$coderodde– coderodde2016年09月28日 18:03:41 +00:00Commented Sep 28, 2016 at 18:03