浏览 2800 次
锁定老帖子 主题:自己动手写算法之选择排序
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-30
算法步骤: 1. 未排序序列中找到最小元素,存放到排序序列的起始位置 2. 再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾 3. 以此类推,直到所有元素均排序完毕 比较复杂度:n(n-1)/2 交换(赋值)复杂度:n-1 优点:相比冒泡排序来讲,交换的次数减少了 缺点:相对快速排序,比较次数仍然是n² public static void selectionSort(Integer[] array){ for(int i=0;i<array.length-1;i++){ //最小数存放位置 int minPosition = i; for(int j=i+1;j<array.length;j++){ if(array[j]<array[minPosition]){ //新的最小数位置 minPosition = j; } } //找到剩余元素中的最小数,并将其交换至起始位置 swap(array, i, minPosition); } } public static void swap(Object[] array,int a,int b){ Object temp = array[a]; array[a] = array[b]; array[b] = temp; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-05-29
交换排名吧?
|
|
返回顶楼 | |
发表时间:2012-05-29
feijing 写道 交换排名吧?
不是交换排序,大多数排序算法中都存在交换操作 这里之所以叫选择排序,是因为每次都是从没有排序的序列中选择最小的元素放在新的位置。交换只是一种手段, 你可以想象从一个未排序的序列A中,每次选择其最小的元素放到新建的序列B(初始为空)中,这样就更好的理解了选择排序。 本例是为了节约空间上的消耗,所以将A空出来地方放新元素。 |
|
返回顶楼 | |
发表时间:2012-07-23
最后修改:2012-07-23
你这就是优化了下冒泡排序。
很普遍 public static void maopaoSort(int[] nums){ for(int i=0;i<nums.length;i++){ //这里-i ,是因为第一次已经把最大的移动到最后了 for(int j=0;j<nums.length-i-1;j++){ int a = nums[j]; int b = nums[j+1]; if(a>b){ nums[j]=b; nums[j+1] = a; } } } } public static void maopaoSortTwo(int nums[]){ for(int i=0;i<nums.length;i++){ for(int j=0;j<nums.length-1;j++){ int a = nums[j]; int b = nums[j+1]; if(a>b){ nums[j] = b; nums[j+1] = a; } } } for (int i = 0; i < nums.length; i++) { System.out.println(nums[i]); } } |
|
返回顶楼 | |