当前位置:   article > 正文

JAVA排序方法学习以及总结_java排序实验心得

java排序实验心得

        近期对与java排序方法在进行学习,想着把自己学习的东西做个归纳整理。一个是分享给大家,共同学习,另一个是对自己后期的查阅也是一个便捷。排序其实就是一种算法逻辑的体现,好的算法,是从其时间复杂度、稳定性纬度来评价的。我本身也不是计算机专业的,总结的地方有问题,还请大家多多交流分享。

一、冒泡排序


        冒泡排序:是一种计算机科学领域的较简单基础的排序算法,通过排序之后,得到一个升序或者降序的排列。

        其排序思想:给定一组无序的数组,从角标最小处开始,依次比较相邻的两个数,将较小的数放前面,较大的数放在后面,依次比较,直到最后的两个数据比较完成,那么数组中数值最大的元素就出现在数组最后的位置。重复比较,便可将数组中所有元素按照升序进行排列。

举例:有一个数组,使用冒泡排序进行升序。

角标01234
原始数组3223655211

 第一轮次:

                第一次:从角标0开始,和角标1对比,标黄色部分,大的放后面,小的方前面,32>23,两个数据进行交换,交换之后的数组如下图:,依次进行对比,直至最后两个元素进行对比之后,得到的数组如下:23,32,52,11,65。第一轮次,总共比较4次。

第一次角标01234
数组2332655211
第二次角标01234
数组2332655211
第三次角标01234
数组2332526511
第四次角标01234
数组2332521165

第二轮次:

        同第一轮次一样,相邻的两个元素进行比较,由于第一次已经得到了最大的数值了,所以最后不需要进行对比。具体对比情况如下,第二轮次一共比较3次,可以得到第二大的数值。

第一次角标01234
数组2332521165
第二次角标01234
数组2332521165
第三次角标01234
数组2332115265

第三轮次:

        第三轮次一共比较2次,得到第三大的值,具体情况如下表:

第一次角标01234
数组2332115265
第二次角标01234
数组2311325265

第四轮次:

        第四轮次只需要比较剩余的两个数值,比较一次即可。得到最终的排序数组。

第一次角标01234
数组1123325265

Java程序实现方法:

  1. //定义主类
  2. public class Test {
  3. public static void main(String[] args) {
  4. //自定义一个无序的数组
  5. int [] arr = new int[]{32,23,65,52,11};
  6. System.out.println("冒泡排序前:");
  7. Test.printArray(arr);
  8. System.out.println("冒泡排序后:");
  9. Test.bubbleSort(arr);
  10. Test.printArray(arr);
  11. }
  12. //定义静态方法printArray,功能是用来遍历数组
  13. public static void printArray(int arr[]){
  14. System.out.print("[");
  15. for (int i = 0 ; i<arr.length;i++){
  16. if (i==arr.length-1){
  17. System.out.println(arr[i]+"]");
  18. }else{
  19. System.out.print(arr[i]+", ");
  20. }
  21. }
  22. }
  23. //定义冒泡bubbleSort
  24. public static void bubbleSort(int arr[]){
  25. for (int x = 0 ; x<arr.length-1;x++){
  26. for (int y = 0;y<arr.length-1-x;y++){
  27. if (arr[y]>arr[y+1]){
  28. int temp = arr[y];
  29. arr[y] = arr[y+1];
  30. arr[y+1] = temp;
  31. }
  32. }
  33. }
  34. }
  35. }

二、选择排序


        选择排序思想:它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。

选择排序过程:

第一轮次:第一次,从角标0开始,和角标1进行比较,那个小,那个放在前面,32>23,两个进行交换,第二次,角标0和角标2对比,23<65,不用交换,一次进行比较,最终把最小的数值放在了角标0处,第一轮次一共比较4次。

第一轮次角标01234
数组3223655211
第一次比较2332655211
第二次比较2332655211
第三次比较2332655211
第四次比较1132655223

第二次轮次:第一次从角标1开始,和角标2对比,32<65,不用交换,第二次角标1和角标3对比,32<52,不用交换,第三次角标1和角标4的对比,32>23,进行交换。第二轮次一共比较3次。

第二轮次角标01234
数组1132655223
第一次比较1132655223
第二次比较1132655223
第三次比较1123655232

第三轮次:比较2次

第三轮次角标01234
数组1123655232
第一次比较1123526532
第二次比较1123326552

第四轮次:比较1次

第四轮次角标01234
数组1123326552
第一次比较1123325265

Java程序实现方法:

  1. //定义主类
  2. public class Test {
  3. public static void main(String[] args) {
  4. //自定义一个无序的数组
  5. int [] arr = new int[]{32,23,65,52,11};
  6. System.out.println("选择排序前:");
  7. Test.printArray(arr);
  8. System.out.println("选择排序后:");
  9. Test.selectionSort(arr);
  10. Test.printArray(arr);
  11. }
  12. //定义静态方法printArray,功能是用来遍历数组
  13. public static void printArray(int arr[]){
  14. System.out.print("[");
  15. for (int i = 0 ; i<arr.length;i++){
  16. if (i==arr.length-1){
  17. System.out.println(arr[i]+"]");
  18. }else{
  19. System.out.print(arr[i]+", ");
  20. }
  21. }
  22. }
  23. //定义选择排序
  24. public static void selectionSort(int arr[]){
  25. for (int i = 0 ; i<arr.length;i++){
  26. for(int j = i+1 ;j<arr.length;j++){
  27. if(arr[i] > arr[j]){
  28. int temp = arr[i];
  29. arr[i] = arr[j];
  30. arr[j] = temp;
  31. }
  32. }
  33. }
  34. }
  35. }

三、插入排序


        插入排序:从第一个元素开始,该元素可以认为已经被排序,取出下一个元素,在已经排序的元素序列中从后向前扫描,如果该元素(已排序)大于新元素,将该元素移到下一位置,重复步骤,直到找到已排序的元素小于或者等于新元素的位置,将新元素插入到该位置后,重新获取下一个元素,重复步骤。

举例说明:

        原始数组:

角标01234
原始数组3223655211

 第一个元素默认是已经被排序了,取出下一个元素,角标1的23,32>23,将角标0的32向后移动,此时的数组是:

角标01234
原始数组3223655211
第一次比较233265521

此时角标0和角标1是有序的,取出下一个元素,角标2的65,和已排序的角标1和角标0对比,都比前面的大,保持不动,继续获取下一个元素,角标3的52,和已排序的角标2,1,0依次进行对比, 65>52,65向后移动一位,32<52,保持不动,把52插入到角标2处,此时的数组如下:

角标01234
原始数组3223655211
第一次比较2332655211
第二次比较2332526511

 获取下一个元素,角标4的11,和角标3,2,1,0一次进行对比,比11大的往后移动一位,最终把11插入至角标0处。

角标01234
原始数组3223655211
第一次比较2332655211
第二次比较2332526511
第三次比较1123325265

java程序实现方法:

  1. //定义主类
  2. public class Test {
  3. public static void main(String[] args) {
  4. //自定义一个无序的数组
  5. int [] arr = new int[]{32,23,65,52,11};
  6. System.out.println("选择排序前:");
  7. Test.printArray(arr);
  8. System.out.println("选择排序后:");
  9. Test.insertSort(arr);
  10. Test.printArray(arr);
  11. }
  12. //定义静态方法printArray,功能是用来遍历数组
  13. public static void printArray(int arr[]){
  14. System.out.print("[");
  15. for (int i = 0 ; i<arr.length;i++){
  16. if (i==arr.length-1){
  17. System.out.println(arr[i]+"]");
  18. }else{
  19. System.out.print(arr[i]+", ");
  20. }
  21. }
  22. }
  23. // 插入排序方法
  24. public static void insertSort(int arr[]){
  25. for(int i = 1 ;i<arr.length;i++){
  26. int j = i;
  27. int temp = arr[i];
  28. while (j>0 && temp<arr[j-1]){
  29. arr[j] = arr[j-1];
  30. j--;
  31. }
  32. arr[j] = temp;
  33. }
  34. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/556661
推荐阅读
相关标签
  

闽ICP备14008679号