Changing sorting algorithm java












0















starting Java coder here. I was wondering how to change my code so it would sort array by always swapping the biggest value to first. Sample output should be:



[3, 1, 2, 0] [3, 2, 1, 0].



public class Sorting {

static void biggest(int arr, int start, int end) {
for (start = 0; start < arr.length; start++) {
for (end = start + 1; end < arr.length; end++) {
if (arr[start] < arr[end]) {
int temp = arr[end];
arr[end] = arr[start];
arr[start] = temp;
System.out.println(Arrays.toString(arr));

}
}
}
}

public static void main(String args) {
int arr = {0, 1, 2, 3};
int temp = 0;
for (int i = 0; i < 4; ++i) {
biggest(arr, temp, 4 - 1);
for (int j = 0; j < 4; ++j) {
}
++temp;
}
}


Thanks in advance,
- Em










share|improve this question























  • Please read "How to create a Minimal, Complete, and Verifiable example". Then use the edit link to improve your question (do not add more information via comments). Otherwise we are not able to answer your question and help you.

    – GhostCat
    Nov 26 '18 at 19:01
















0















starting Java coder here. I was wondering how to change my code so it would sort array by always swapping the biggest value to first. Sample output should be:



[3, 1, 2, 0] [3, 2, 1, 0].



public class Sorting {

static void biggest(int arr, int start, int end) {
for (start = 0; start < arr.length; start++) {
for (end = start + 1; end < arr.length; end++) {
if (arr[start] < arr[end]) {
int temp = arr[end];
arr[end] = arr[start];
arr[start] = temp;
System.out.println(Arrays.toString(arr));

}
}
}
}

public static void main(String args) {
int arr = {0, 1, 2, 3};
int temp = 0;
for (int i = 0; i < 4; ++i) {
biggest(arr, temp, 4 - 1);
for (int j = 0; j < 4; ++j) {
}
++temp;
}
}


Thanks in advance,
- Em










share|improve this question























  • Please read "How to create a Minimal, Complete, and Verifiable example". Then use the edit link to improve your question (do not add more information via comments). Otherwise we are not able to answer your question and help you.

    – GhostCat
    Nov 26 '18 at 19:01














0












0








0








starting Java coder here. I was wondering how to change my code so it would sort array by always swapping the biggest value to first. Sample output should be:



[3, 1, 2, 0] [3, 2, 1, 0].



public class Sorting {

static void biggest(int arr, int start, int end) {
for (start = 0; start < arr.length; start++) {
for (end = start + 1; end < arr.length; end++) {
if (arr[start] < arr[end]) {
int temp = arr[end];
arr[end] = arr[start];
arr[start] = temp;
System.out.println(Arrays.toString(arr));

}
}
}
}

public static void main(String args) {
int arr = {0, 1, 2, 3};
int temp = 0;
for (int i = 0; i < 4; ++i) {
biggest(arr, temp, 4 - 1);
for (int j = 0; j < 4; ++j) {
}
++temp;
}
}


Thanks in advance,
- Em










share|improve this question














starting Java coder here. I was wondering how to change my code so it would sort array by always swapping the biggest value to first. Sample output should be:



[3, 1, 2, 0] [3, 2, 1, 0].



public class Sorting {

static void biggest(int arr, int start, int end) {
for (start = 0; start < arr.length; start++) {
for (end = start + 1; end < arr.length; end++) {
if (arr[start] < arr[end]) {
int temp = arr[end];
arr[end] = arr[start];
arr[start] = temp;
System.out.println(Arrays.toString(arr));

}
}
}
}

public static void main(String args) {
int arr = {0, 1, 2, 3};
int temp = 0;
for (int i = 0; i < 4; ++i) {
biggest(arr, temp, 4 - 1);
for (int j = 0; j < 4; ++j) {
}
++temp;
}
}


Thanks in advance,
- Em







java sorting






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 26 '18 at 18:56









EmilycodesEmilycodes

31




31













  • Please read "How to create a Minimal, Complete, and Verifiable example". Then use the edit link to improve your question (do not add more information via comments). Otherwise we are not able to answer your question and help you.

    – GhostCat
    Nov 26 '18 at 19:01



















  • Please read "How to create a Minimal, Complete, and Verifiable example". Then use the edit link to improve your question (do not add more information via comments). Otherwise we are not able to answer your question and help you.

    – GhostCat
    Nov 26 '18 at 19:01

















Please read "How to create a Minimal, Complete, and Verifiable example". Then use the edit link to improve your question (do not add more information via comments). Otherwise we are not able to answer your question and help you.

– GhostCat
Nov 26 '18 at 19:01





Please read "How to create a Minimal, Complete, and Verifiable example". Then use the edit link to improve your question (do not add more information via comments). Otherwise we are not able to answer your question and help you.

– GhostCat
Nov 26 '18 at 19:01












1 Answer
1






active

oldest

votes


















2














If you just want the sort to be successful, I suggest taking advantage of Java's built in sort method then reversing the list as suggested here:



Arrays.sort(arr);
ArrayUtils.reverse(arr);


But it sounds like the spirit of your question is to modify your code for this purpose. Here's the solution I came up with:



import java.util.Arrays;

public class Sorting {

static void biggest(int arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(Arrays.toString(arr));
int max, maxAt = i;
for (int j = i; j < arr.length; j++) {
maxAt = arr[j] > arr[maxAt] ? j : maxAt;
}
max = arr[maxAt];
if (arr[i] < max) {
arr[maxAt] = arr[i];
arr[i] = max;
}
}
}

public static void main(String args) {
int arr = {0, 1, 2, 3};
biggest(arr);
System.out.println(Arrays.toString(arr));
}
}


First off, you had a lot of extra code that you didn't need. It's a bad idea to have a loop in your main. That should be handled by the helper function. You also had a lot of redundant declarations (like start and end). You were on the right track with your helper function, but because of your main loop your time complexity was 0(n²). Eliminating that allows mine to be O(logn). Complexity aside, the key difference in terms of logic is here in your internal loop:



for (end = start + 1; end < arr.length; end++) {
if (arr[start] < arr[end]) {
int temp = arr[end];
arr[end] = arr[start];
arr[start] = temp;


In this loop you're switching the array entry with the first one you find that's bigger. This will result in unwanted early switches (like 1 & 2). Here is my solution:



for (int j = i; j < arr.length; j++) {
maxAt = arr[j] > arr[maxAt] ? j : maxAt;
}
max = arr[maxAt];
if (arr[i] < max) {
arr[maxAt] = arr[i];
arr[i] = max;
}


The key difference is that I search for the maximum value entry following the one we're swapping. That way as we proceed through the array we will always bring forward the next biggest.



Best of luck learning Java I hope this helps!






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53487376%2fchanging-sorting-algorithm-java%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    2














    If you just want the sort to be successful, I suggest taking advantage of Java's built in sort method then reversing the list as suggested here:



    Arrays.sort(arr);
    ArrayUtils.reverse(arr);


    But it sounds like the spirit of your question is to modify your code for this purpose. Here's the solution I came up with:



    import java.util.Arrays;

    public class Sorting {

    static void biggest(int arr) {
    for (int i = 0; i < arr.length; i++) {
    System.out.println(Arrays.toString(arr));
    int max, maxAt = i;
    for (int j = i; j < arr.length; j++) {
    maxAt = arr[j] > arr[maxAt] ? j : maxAt;
    }
    max = arr[maxAt];
    if (arr[i] < max) {
    arr[maxAt] = arr[i];
    arr[i] = max;
    }
    }
    }

    public static void main(String args) {
    int arr = {0, 1, 2, 3};
    biggest(arr);
    System.out.println(Arrays.toString(arr));
    }
    }


    First off, you had a lot of extra code that you didn't need. It's a bad idea to have a loop in your main. That should be handled by the helper function. You also had a lot of redundant declarations (like start and end). You were on the right track with your helper function, but because of your main loop your time complexity was 0(n²). Eliminating that allows mine to be O(logn). Complexity aside, the key difference in terms of logic is here in your internal loop:



    for (end = start + 1; end < arr.length; end++) {
    if (arr[start] < arr[end]) {
    int temp = arr[end];
    arr[end] = arr[start];
    arr[start] = temp;


    In this loop you're switching the array entry with the first one you find that's bigger. This will result in unwanted early switches (like 1 & 2). Here is my solution:



    for (int j = i; j < arr.length; j++) {
    maxAt = arr[j] > arr[maxAt] ? j : maxAt;
    }
    max = arr[maxAt];
    if (arr[i] < max) {
    arr[maxAt] = arr[i];
    arr[i] = max;
    }


    The key difference is that I search for the maximum value entry following the one we're swapping. That way as we proceed through the array we will always bring forward the next biggest.



    Best of luck learning Java I hope this helps!






    share|improve this answer




























      2














      If you just want the sort to be successful, I suggest taking advantage of Java's built in sort method then reversing the list as suggested here:



      Arrays.sort(arr);
      ArrayUtils.reverse(arr);


      But it sounds like the spirit of your question is to modify your code for this purpose. Here's the solution I came up with:



      import java.util.Arrays;

      public class Sorting {

      static void biggest(int arr) {
      for (int i = 0; i < arr.length; i++) {
      System.out.println(Arrays.toString(arr));
      int max, maxAt = i;
      for (int j = i; j < arr.length; j++) {
      maxAt = arr[j] > arr[maxAt] ? j : maxAt;
      }
      max = arr[maxAt];
      if (arr[i] < max) {
      arr[maxAt] = arr[i];
      arr[i] = max;
      }
      }
      }

      public static void main(String args) {
      int arr = {0, 1, 2, 3};
      biggest(arr);
      System.out.println(Arrays.toString(arr));
      }
      }


      First off, you had a lot of extra code that you didn't need. It's a bad idea to have a loop in your main. That should be handled by the helper function. You also had a lot of redundant declarations (like start and end). You were on the right track with your helper function, but because of your main loop your time complexity was 0(n²). Eliminating that allows mine to be O(logn). Complexity aside, the key difference in terms of logic is here in your internal loop:



      for (end = start + 1; end < arr.length; end++) {
      if (arr[start] < arr[end]) {
      int temp = arr[end];
      arr[end] = arr[start];
      arr[start] = temp;


      In this loop you're switching the array entry with the first one you find that's bigger. This will result in unwanted early switches (like 1 & 2). Here is my solution:



      for (int j = i; j < arr.length; j++) {
      maxAt = arr[j] > arr[maxAt] ? j : maxAt;
      }
      max = arr[maxAt];
      if (arr[i] < max) {
      arr[maxAt] = arr[i];
      arr[i] = max;
      }


      The key difference is that I search for the maximum value entry following the one we're swapping. That way as we proceed through the array we will always bring forward the next biggest.



      Best of luck learning Java I hope this helps!






      share|improve this answer


























        2












        2








        2







        If you just want the sort to be successful, I suggest taking advantage of Java's built in sort method then reversing the list as suggested here:



        Arrays.sort(arr);
        ArrayUtils.reverse(arr);


        But it sounds like the spirit of your question is to modify your code for this purpose. Here's the solution I came up with:



        import java.util.Arrays;

        public class Sorting {

        static void biggest(int arr) {
        for (int i = 0; i < arr.length; i++) {
        System.out.println(Arrays.toString(arr));
        int max, maxAt = i;
        for (int j = i; j < arr.length; j++) {
        maxAt = arr[j] > arr[maxAt] ? j : maxAt;
        }
        max = arr[maxAt];
        if (arr[i] < max) {
        arr[maxAt] = arr[i];
        arr[i] = max;
        }
        }
        }

        public static void main(String args) {
        int arr = {0, 1, 2, 3};
        biggest(arr);
        System.out.println(Arrays.toString(arr));
        }
        }


        First off, you had a lot of extra code that you didn't need. It's a bad idea to have a loop in your main. That should be handled by the helper function. You also had a lot of redundant declarations (like start and end). You were on the right track with your helper function, but because of your main loop your time complexity was 0(n²). Eliminating that allows mine to be O(logn). Complexity aside, the key difference in terms of logic is here in your internal loop:



        for (end = start + 1; end < arr.length; end++) {
        if (arr[start] < arr[end]) {
        int temp = arr[end];
        arr[end] = arr[start];
        arr[start] = temp;


        In this loop you're switching the array entry with the first one you find that's bigger. This will result in unwanted early switches (like 1 & 2). Here is my solution:



        for (int j = i; j < arr.length; j++) {
        maxAt = arr[j] > arr[maxAt] ? j : maxAt;
        }
        max = arr[maxAt];
        if (arr[i] < max) {
        arr[maxAt] = arr[i];
        arr[i] = max;
        }


        The key difference is that I search for the maximum value entry following the one we're swapping. That way as we proceed through the array we will always bring forward the next biggest.



        Best of luck learning Java I hope this helps!






        share|improve this answer













        If you just want the sort to be successful, I suggest taking advantage of Java's built in sort method then reversing the list as suggested here:



        Arrays.sort(arr);
        ArrayUtils.reverse(arr);


        But it sounds like the spirit of your question is to modify your code for this purpose. Here's the solution I came up with:



        import java.util.Arrays;

        public class Sorting {

        static void biggest(int arr) {
        for (int i = 0; i < arr.length; i++) {
        System.out.println(Arrays.toString(arr));
        int max, maxAt = i;
        for (int j = i; j < arr.length; j++) {
        maxAt = arr[j] > arr[maxAt] ? j : maxAt;
        }
        max = arr[maxAt];
        if (arr[i] < max) {
        arr[maxAt] = arr[i];
        arr[i] = max;
        }
        }
        }

        public static void main(String args) {
        int arr = {0, 1, 2, 3};
        biggest(arr);
        System.out.println(Arrays.toString(arr));
        }
        }


        First off, you had a lot of extra code that you didn't need. It's a bad idea to have a loop in your main. That should be handled by the helper function. You also had a lot of redundant declarations (like start and end). You were on the right track with your helper function, but because of your main loop your time complexity was 0(n²). Eliminating that allows mine to be O(logn). Complexity aside, the key difference in terms of logic is here in your internal loop:



        for (end = start + 1; end < arr.length; end++) {
        if (arr[start] < arr[end]) {
        int temp = arr[end];
        arr[end] = arr[start];
        arr[start] = temp;


        In this loop you're switching the array entry with the first one you find that's bigger. This will result in unwanted early switches (like 1 & 2). Here is my solution:



        for (int j = i; j < arr.length; j++) {
        maxAt = arr[j] > arr[maxAt] ? j : maxAt;
        }
        max = arr[maxAt];
        if (arr[i] < max) {
        arr[maxAt] = arr[i];
        arr[i] = max;
        }


        The key difference is that I search for the maximum value entry following the one we're swapping. That way as we proceed through the array we will always bring forward the next biggest.



        Best of luck learning Java I hope this helps!







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 26 '18 at 20:21









        user3434441user3434441

        362




        362
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53487376%2fchanging-sorting-algorithm-java%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

            Calculate evaluation metrics using cross_val_predict sklearn

            Insert data from modal to MySQL (multiple modal on website)