Day_47选择排序

news/2024/10/22 12:30:37/

目录

一. 选择排序的实现

        1. 简单选择排序

        2. 性能分析

二. 代码实现

        1. 核心代码

三. 代码展示

四. 数据测试

五. 总结


一. 选择排序的实现

        1. 简单选择排序

        选择排序的基本思想是:每一趟(如第i趟)在后面n-i+1(i=1,2,3...n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下1个,完成排序。

        根据上面的思想可以很直观的得出简单选择排序算法的思想:假设排序表为L[1...n],第i趟排序即从L[i...n]中选择关键字最小的元素与L(i)交换,每一趟排序可以确定一个元素的最终位置,这样经过n-1趟排序就可使得整个排序表有序。

        2. 性能分析

        空间效率:仅使用常数个辅助单元,故空间效率为O(1)。

        时间效率:在简单选择排序过程中,元素的比较次数与序列的初始状态无关,始终是n(n-1)/2次,故时间复杂度是O(n^{2})

        稳定性:在第i趟找到最小的元素后,和第i个元素交换,可能会导致第i个元素与其含有相同关键字元素的相对位置发生改变。因此,简单选择排序是一种不稳定的排序方法。

二. 代码实现

        1. 核心代码

        相当easy的代码,两轮循环,第一轮循环控制最小数字的位置i,第二轮循环找到最小数字的位置min,最后将i和min互换位置即可得到最终排序结果。

    /************************ Selection sort. All data are valid.**********************/public void selectionSort() {DataNode tempNode;int tempIndexForSmallest;for (int i = 0; i < length - 1; i++) {// Initialize.tempNode = data[i];tempIndexForSmallest = i;for (int j = i + 1; j < length; j++) {if (data[j].key < tempNode.key) {tempNode = data[j];tempIndexForSmallest = j;} // Of if} // Of for j// Change the selected one with the current one.data[tempIndexForSmallest] = data[i];data[i] = tempNode;} // Of for i}// Of selectionSort

三. 代码展示

        主类:

package Day_47;import Day_41.DataArray;public class demo1 {/************************ The entrance of the program.** @param args Not used now.**********************/public static void main(String args[]) {
//        System.out.println("\r\n-------sequentialSearchTest-------");int []paraKeyArray;paraKeyArray=new int[]{11,2,3};String[] paraContentArray = new String[]{"121","21","324"};DataArray test=new DataArray(paraKeyArray,paraContentArray);//        test.insertionSort();
//        System.out.println("Result\r\n" + test);test.selectionSortTest();}// Of main
}

        调用类:

    /************************ Selection sort. All data are valid.**********************/public void selectionSort() {DataNode tempNode;int tempIndexForSmallest;for (int i = 0; i < length - 1; i++) {// Initialize.tempNode = data[i];tempIndexForSmallest = i;for (int j = i + 1; j < length; j++) {if (data[j].key < tempNode.key) {tempNode = data[j];tempIndexForSmallest = j;} // Of if} // Of for j// Change the selected one with the current one.data[tempIndexForSmallest] = data[i];data[i] = tempNode;} // Of for i}// Of selectionSort/************************ Test the method.**********************/public static void selectionSortTest() {int[] tempUnsortedKeys = { 5, 3, 6, 10, 7, 1, 9 };String[] tempContents = { "if", "then", "else", "switch", "case", "for", "while" };DataArray tempDataArray = new DataArray(tempUnsortedKeys, tempContents);System.out.println(tempDataArray);tempDataArray.selectionSort();System.out.println("Result\r\n" + tempDataArray);}// Of selectionSortTest

四. 数据测试

运行结果

五. 总结

        我个人感觉这个排序算法是最好理解的代码了(没有之一!),每一次从数字序列里面找到最小的数字,将它换到头部,一直进行n-1轮,故可以得到最终答案。


http://www.ppmy.cn/news/283563.html

相关文章

GLaDOS加速网络套餐edu教育网邮箱免费使用

产品介绍 教育优惠分享的好处&#xff0c;就是能一对一接触到网友的真实需求和最新的教育优惠产品&#xff0c;今天的这款也是网友投稿分享。 GLaDOS用于教育&#xff1a;建立开放思想和开放社会 GLaDOS Education可帮助学生&#xff0c;教师和学校找到他们掌握网络所需的工具…

用vi或vim编辑文件时出现e325: attention错误的解决办法

原因是编辑文档时出现错误操作&#xff0c;自动创建的临时文件&#xff0c;删除即可&#xff01;&#xff01;&#xff01; 解决方法一&#xff1a; 在出现“e325: attention”错误的提示时&#xff0c;按 “D” 即刻删除临时文件。 解决方法二&#xff1a; 进入需要编辑的…

error: command ‘D:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe‘ f

跟着知乎“略略略”大佬改建YOLOv5的旋转目标检测项目。 在python项目中使用C文件&#xff0c;首先安装了swig&#xff0c;将polyiou.i文件编译生成了polyiou.cpp文件&#xff0c;然后执行 python setup.py build_ext --inplace 结果报了一大堆polyiou.cpp中的错误&#xff0c;…

#174-D: expression has no effect报错解决方法

今天进行编程时&#xff0c;代码写完&#xff0c;进行编译时突然弹出以上错误&#xff0c;在网上找了好久的答案都是所答非所问&#xff0c;思考好久找到了错误&#xff0c;这也是新手编程最容易犯的错误。造成此错误的原因就是在调用函数时后面忘加了( )&#xff0c;在我的程序…

vi编辑时出现E325:ATTENTION(简单易懂,快速解决问题)

当出现这个问题时&#xff0c;是因为由于在编辑该文件的时候异常退出了&#xff0c;因为vim在编辑文件时会创建一个交换文件swap file以保证文件的安全性。要想解决这个问题&#xff0c; 1.找到开头前两行 示例如下&#xff1a; E325: ATTENTION Found a swap file by the n…

nyoj325 zb的生日 DFS

#include<stdio.h> #include<math.h> int a[21],sum,all,n,i,j,min; void dfs(int star) { if(starn) return; if(fabs(all-sum*2)<min)//差值更小 minfabs(all-sum*2); for(int jstar;j<n;j) { suma[j]; dfs(j1); sum-a[j]; } } int main() { while(sca…

SAP MM之移动类型(Movement type-MVT)

SAP如何在系统中实现对物流的控制&#xff1a; 一、需要满足的最基本需求是&#xff1a;物流的进、出、消耗&#xff1a; 1、何来何往&#xff1a;来&#xff08;采购订单/生产订单/其它库位&#xff09;&#xff1b;往&#xff08;销售订单/生产订单/成本中心/内部订单/其它库…

打开Vi编辑器出现E325 ATTENTION的解决方法

E325: ATTENTION Found a swap file by the name “~/catkin_ws/src/rikirobot_project/rikirobot/src/. riki_base_node.cpp.swp” owned by: riki dated: Sat Jul 27 10:59:43 2019 [cannot be read] While opening file “/home/riki/catkin_ws/src/rikirobot_project/rikir…