您的位置:首页 > 编程语言 > Java开发

Java-选择排序

2014-03-15 22:16 120 查看
public class Java选择排序 {

    /*    需求:给给定的数组排序,使数组递增排列,数组{7,3,2,0,6,4,8,1,5,9},依次输出排序前和排序后的数组元素;

    方法:选择排序

    思路:

    1.定义一个功能,给该数组进行排序,使用一个函数;

    2.将第一个元素和其他元素进行一一比较,如果大于与之相比较的元素,

           则交换两个元素的位置,这样进行一趟比较,就能将最小的元素排在0号角标

           的位置,然后将第二个元素和它后面的元素进行一趟比较,就能将次小的元素排在

           1号角标的位置,依次反复下去,可以进行9趟比较,所有元素呈现递增排列,最后一个元素自动站对位置,

           至此,排序结束;趟数逐次递减,*使用for循环,控制趟数,这是外循环,

           内循环控制每一个趟的比较次数,循环体使用判断语句,完成比较*;

    3.定义一个功能,输出数组中的每一个元素;

    步骤:

    1.写出排序功能函数:无输出结果,输出类型为void,因为排序是操作堆内存中的元素,

           最后输出的还是堆内存中的元素,参数是目标数组;

    2.写出数组输出函数:无输出结果,输出类型为void,参数为目标数组;

    3.主函数中多次调用上面的两个函数,便可达到需求;

    */

           public static void selectsort(int[] arr) {

                  for (int x = 0;x < arr.length  ;x ++ )

                //使用arr.length使得代码可以复用,通用性提高,也就说对于任意给出的一个数组进行排序,

                     //只需调用该函数即可;

                {

                         for (int y = x+1 ;y <arr.length ;y ++ )

//易错点:y的控制条件与x一样,都是小于arr.length - 1,那最后一个元素就不能参加比较了,导致结果可能性错误;

//优化代码:使用y = x + 1,使得当前选择元素第一次和它的后一个元素比较大小,从而避免和自己作没有意义的比较,

//每一趟的比较次数多一次,但对于算法的时间复杂度没有什么实质性的意义;

                         {

                                if (arr[x] >arr[y]){

                                       int temp =arr[x];

                                       arr[x] =arr[y];

                                       arr[y] =temp;

                                }

                         }

                  }

           }

           public static void printarray(int[] arr){

                  System.out.print("[");

                  for(int x = 0;x < arr.length ;x ++ ){

                         if (x != arr.length - 1){

                                System.out.print(arr[x]+ ", ");

                         }

                         else

                                System.out.print(arr[x]);

                  }

                  System.out.println("]");

           }

           public static void main(String[] args) {

                  int[] arr = {7,3,2,0,6,4,8,9,5,1};

                  printarray(arr);

                  selectsort(arr);

                  printarray(arr);

           }

    }

//选择排序

//原理:每次都找到当次最大的数,按大小顺序依次放入数组相应位置

//比如:第一次先找到最大的数并记下其位置,如果其不在数组第一位,

//则将其与第一位交换,使最大数置于第一位

//第二次再循环查找第二大的数并记下其位置,如果其不在数组第二位,

//则将其与第二位交换,使最大数置于第二位

//依次类推.........................................

//第i次再循环查找第i大的数并记下其位置,如果其不在数组第 i位,

//则将其与第 i位交换,使最大数置于第 i位

public class Java选择排序max {

    public static void main(String[] args) {

        int[] a = {7,3,2,0,6,4,8,9,5,1};

        int max = 0;

        int tmp = 0;

        for(int i=0;i<a.length;i++){

            max = i;//

 /**查找第 i大的数,直到记下第 i大数的位置***/

            for(int j=i+1;j<a.length;j++){

                if(a[max]<a[j])

                    max = j;//记下较大数位置,再次比较,直到最大

            }

 /***如果第 i大数的位置不在 i,则交换****/

            if(i!=max){

                tmp = a[i];

                a[i] = a[max];

                a[max] = tmp;

            }

        }

        for(int i=0;i<a.length;i++)

 System.out.print(a[i]+" ");

    }

}

public class Java选择排序min {

    public static void main(String[] args) {

        int[] arr ={7,3,2,0,6,4,8,9,5,1};

        int temp = 0;

        int min = 0;

        for(int i=0;i<arr.length;i++){

            min = i;

            for(int j=i+1;j<arr.length;j++){

                if(arr[min]>arr[j]){

                    min = j;

                }

                if(i!=min){

                    temp = arr[i];

                    arr[i] = arr[min];

                    arr[min] = temp;

                }

            }

        }

            for(int k=0;k<arr.length;k++){

                 System.out.print(arr[k]+" ");

                    }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: