栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

十大经典排序算法(上篇):选择排序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

十大经典排序算法(上篇):选择排序

选择排序

前面说的冒泡排序是每一轮比较确定最后一个元素,中间过程不断地交换。而选择排序就是每次选择剩下的元素中最小的那个元素,与当前索引位置的元素交换,直到所有的索引位置都选择完成。

排序的步骤如下:

从第一个元素开始,遍历其后面的元素,找出其后面比它更小的且最小的元素,若有,则两者交换,保证第一个元素最小。

对第二个元素一样,遍历其后面的元素,找出其后面比它更小的且最小的元素,若存在,则两者交换,保证第二个元素在未排序的数中(除了第一个元素)最小。

依次类推,直到最后一个元素,那么数组就已经排好序了。

静态排序过程如下:

前面两轮选择排序已经分别将 21 和 34 选择出来,放到最前面的位置。

剩下的排序是确定 56 和 90 的位置,最后一个 98 自然就是最大的数,不需要再排序。

代码实现

新建一个类 SelectionSort.java,主要函数如下:

public class SelectionSort {

  public static void selectionSort(int[] nums) {
    int times = 0;
    int size = nums.length;
    int minIndex, temp;
    for (int i = 0; i < size - 1; i++) {
      System.out.print("第" + (i + 1) + "轮选择开始:");
      minIndex = i;
      for (int j = i + 1; j < size; j++) {
        times++;
        if (nums[j] < nums[minIndex]) {
          minIndex = j;
        }
      }
      System.out.println("交换 " + nums[i] + "和" + nums[minIndex]);
      temp = nums[i];
      nums[i] = nums[minIndex];
      nums[minIndex] = temp;
      printf(nums);
    }
    System.out.println("比较次数:" + times);
  }
}

测试代码:

public static void main(String[] args) {
    int[]nums = new int[]{98,90,34,56,21};
    printf(nums);
    selectionSort(new int[]{98,90,34,56,21});
}
C++ 代码解法
#include 
using namespace std;

void selectionSort(int nums[],int size);
void printf(int nums[],int size);

int main() {
   int nums[] = {98,90,34,56,21};
   int size =  sizeof(nums)/sizeof(nums[0]);
   printf(nums,size);
   selectionSort(nums,size);
   return 0;
}

void selectionSort(int nums[],int size) {
  int times = 0;
  int minIndex;
  for (int i = 0; i < size - 1; i++) {
    cout<< "第" << (i + 1) << "轮选择开始:"< 
Python 解法代码 
class Solution:
    def selectionSort(self, nums):
        times = 0
        size = len(nums)
        minIndex, temp = 0, 0

        for i in range(size - 1):
            print("第", (i + 1), "轮选择开始:")
            minIndex = i
            for j in range(i + 1, size):
                times = times + 1
                if (nums[j] < nums[minIndex]):
                    minIndex = j
            print("交换 ", nums[i], "和", nums[minIndex])
            print(end="")
            temp = nums[i]
            nums[i] = nums[minIndex]
            nums[minIndex] = temp
            self.printNums(nums)
        print("比较次数:", times, end="")

    def printNums(self, nums):
        for i in range(len(nums)):
            print("%d " % nums[i], end="")
        print("")


if __name__ == '__main__':
    solution = Solution()
    nums = [98, 90, 34, 56, 21]
    solution.printNums(nums)
    solution.selectionSort(nums)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/771015.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号