java选择排序算法案例

分析:选择排序算法(不稳定)
每一轮从待排序的元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的后边(看实例)。
文字解析:如第一轮:标记第一个数(15)为最小,然后一个一个的比较,2比15小,就暂时标记2为最小,在往后和2一个一个的比较,入过有比2小的,就暂时标记那个数为最下,再继续比较,入过后边的数没有比2小的了,则2和15交换位置(常用方法:加法,借助第三变量,移位等)。
如第二轮:因为数列中2最小,放在最前边了,所以2就不在比较了,即标记剩下的待排序的第一个为最小,在重复第一步(看第二轮的结果加深理解)。
剩下的就是重复第一轮第二轮了。

以实例加深理解:

给定数组:15  2  45  32  56  89  4  15  55  6

第 一 轮:2  15  45  32  56  89  4  15  55  6      比较 9 次

第 二 轮:2  4   45  32  56  89  15 15  55  6      比较 8 次

第 三 轮:2  4   6   32  56  89  15 15  55  45     比较 7 次

第 四 轮:2  4   6   15  56  89  32 15  55  45     比较 6 次

第 五 轮:2  4   6   15  15  89  32 56  55  45     比较 5 次

第 六 轮:2  4   6   15  15  32  89 56  55  45     比较 4 次

第 七 轮:2  4   6   15  15  32  45 56  55  89     比较 3 次

第 八 轮:2  4   6   15  15  32  45 55  56  89     比较 2 次

第 九 轮:2  4   6   15  15  32  45 55  56  89     比较 1 次


源代码:

public class shuzu7 {
    public static void main(String[] args) {
        int[] nums = {15,2,45,32,56,89,4,15,55,6};
        int minIndex = 0;//用于记录每次比较的最小值下标。
        //控制轮数
        for (int i = 0; i < nums.length-1; i++) {

            minIndex = i;//每轮假设一个最小值下标(每轮的第一个)
            //控制比较次数,因为最后一个都需要比较一次,所以是nums.length,不-1
            for (int j = i+1; j < nums.length; j++) {
                //如果标记的数比比较的数大,则换标记数的下标,在进行比较
                if(nums[minIndex]>nums[j]){
                    minIndex = j;
                }
            }
            //判断需要交换的下标是否是自己(i)
            if(minIndex!=i){
                nums[minIndex] = nums[minIndex] + nums[i];
                nums[i] = nums[minIndex] - nums[i];
                nums[minIndex] = nums[minIndex] - nums[i];
            }
        }
        //输出结果
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i]+" ");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java快速排序算法的实例是:public static void quickSort(int[] arr, int low, int high) { int i = low, j = high; int temp; int pivot = arr[(low + high) / 2]; while (i <= j) { while (arr[i] < pivot) { i++; } while (arr[j] > pivot) { j--; } if (i <= j) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; i++; j--; } } if (low < j) quickSort(arr, low, j); if (i < high) quickSort(arr, i, high); } ### 回答2: 快速排序是一种常用的排序算法,它利用分治的思想将一个大问题分成多个小问题进行解决。下面是一个使用Java实现的快速排序算法的示例: ```java public class QuickSort { public static void main(String[] args) { int[] arr = {9, 5, 7, 3, 1, 8, 6, 2, 4}; quickSort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr)); } public static void quickSort(int[] arr, int low, int high) { if (low < high) { int pivot = partition(arr, low, high); quickSort(arr, low, pivot - 1); quickSort(arr, pivot + 1, high); } } public static int partition(int[] arr, int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; swap(arr, i, j); } } swap(arr, i + 1, high); return i + 1; } public static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } ``` 以上代码实现了快速排序算法。首先,在main方法中定义一个待排序的数组。然后调用`quickSort`方法进行排序,该方法接受待排序数组、起始位置和结束位置作为参数。在`quickSort`方法内部,首先判断起始位置是否小于结束位置,如果是,则调用`partition`方法将数组划分为两部分,以一个基准值作为分界点,将比基准值小的元素放在基准值左边,比基准值大的元素放在基准值右边。然后递归地对基准值左边和右边的子数组进行排序。`partition`方法实现了划分的过程,采用双指针的方式,从左到右遍历数组,将小于基准值的元素与指针i指向的元素交换位置,同时将指针i向右移动。最后将基准值与指针i的元素交换位置,使得基准值处于正确的位置上。最终,数组将会按从小到大的顺序排序。 在主函数中输出排序后的数组,得到的结果为:[1, 2, 3, 4, 5, 6, 7, 8, 9]。这证明快速排序算法对给定的数组进行了正确的排序。 ### 回答3: 快速排序是一种常用的排序算法,其算法思想是通过选择一个基准元素,将待排序数组分成两个子数组,一个子数组中的元素都小于基准元素,另一个子数组中的元素都大于基准元素,然后对这两个子数组分别进行快速排序,最后将排好序的子数组合并即可得到整个数组的有序序列。 下面以Java代码为例,简单实现一下快速排序算法: ```java public class QuickSort { public static void quickSort(int[] array, int low, int high) { if (low < high) { // 分区操作,将数组分成两个子数组 int pivot = partition(array, low, high); // 对左子数组进行快速排序 quickSort(array, low, pivot - 1); // 对右子数组进行快速排序 quickSort(array, pivot + 1, high); } } private static int partition(int[] array, int low, int high) { // 选择基准元素 int pivot = array[low]; while (low < high) { // 从右向左找第一个小于基准元素的位置 while (low < high && array[high] >= pivot) { high--; } // 将小于基准元素的值移到左侧 array[low] = array[high]; // 从左向右找第一个大于基准元素的位置 while (low < high && array[low] <= pivot) { low++; } // 将大于基准元素的值移到右侧 array[high] = array[low]; } // 将基准元素放入最终位置 array[low] = pivot; // 返回基准元素的索引位置 return low; } public static void main(String[] args) { int[] array = {6, 5, 3, 1, 8, 7, 2, 4}; int low = 0; int high = array.length - 1; quickSort(array, low, high); System.out.println("排序结果:"); for (int i : array) { System.out.print(i + " "); } } } ``` 以上是一个简单的快速排序算法的实例。在主函数中,创建一个待排序的数组,并调用`quickSort`函数进行排序,并输出排序结果。通过运行程序,可以看到输出的排序结果为`1 2 3 4 5 6 7 8`,表明快速排序算法能够正确地对数组进行快速排序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值