关于排序

冒泡排序 O(n^2) 稳定

原理:左右元素依次比较,将最大的放在右边,最后沉底,然后除了最后一个元素之外再进行上述步骤。

最好的情况是直接是正序的,则可以在交换处加个标记,没交换的情况直接跳出。这样的复杂度就为O(n)。

 

直接插入排序 O(n^2) 稳定

原理:在逻辑上可以将数组分为两部分,前部分有序,后部分无序,从后一部分的数组中依次取出数字与前面有序部分从后往前依次比较,插入到合适的位置,直到后面部分没有元素为止。

 

快速排序 O(nlogn)

原理:先从元素中选择一个数作为基准,然后将整个数组与之比较,大的放右边,小的放左边(即分区操作),然后再对左边和右边的子集都进行相同的操作,直到所有子集都只有一个元素。

 

堆排序 O(nlogn)

原理:每个堆都是完全二叉树,分为大顶堆和小顶堆,大顶堆即节点大于等于其左右孩子,小顶堆反之。所以首先需要调整至大顶堆的结构,找到左边最后一个非叶子节点,进行调整,保证节点大于叶子,然后依次往上调整。调整好后,再将根节点和最后一个叶子进行交换。然后再继续调整结构,使其满足大顶堆结构,再继续交换直到换完为止。

 

希尔排序 O(nlogn)~O(n^2)

原理:将数组分为lenth/2各组,依次间隔,每个组分别进行大小比较,进行交换。再将其分为length/2/2组,进行插入排序。直到最后分为一组,只用进行一遍循环调整就可以得到正确顺序。

 

选择排序 O(n^2) 稳定

原理:逻辑上分为两个部分,前一个部分装有序的数组,后一部分装有序部分,后面部分进行筛选,依次选出最小的数放在前一部分的最后。

 

好的,下面是一个使用JSP实现排序的程序: 1. 创建一个JSP页面,命名为sort.jsp,并在页面添加以下代码: ```jsp <%@ page language="java" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>排序</title> </head> <body> <h1>排序算法演示</h1> <form method="post" action="sort.jsp"> <label>输入待排序的数字,用逗号分隔:</label> <input type="text" name="numbers"> <input type="submit" value="排序"> </form> <% // 接收表单提交的数据 String numbersString = request.getParameter("numbers"); if (numbersString != null && !numbersString.isEmpty()) { // 将输入的数字字符串转换为整型数组 String[] numbersArray = numbersString.split(","); int[] numbers = new int[numbersArray.length]; for (int i = 0; i < numbersArray.length; i++) { numbers[i] = Integer.parseInt(numbersArray[i]); } // 调用排序算法进行排序 // 这里使用冒泡排序算法作为示例 for (int i = 0; i < numbers.length - 1; i++) { for (int j = 0; j < numbers.length - 1 - i; j++) { if (numbers[j] > numbers[j + 1]) { int temp = numbers[j]; numbers[j] = numbers[j + 1]; numbers[j + 1] = temp; } } } // 输出排序后的结果 out.println("<p>排序结果为:</p>"); out.println("<ul>"); for (int i = 0; i < numbers.length; i++) { out.println("<li>" + numbers[i] + "</li>"); } out.println("</ul>"); } %> </body> </html> ``` 2. 在排序算法演示页面,用户可以输入一组数字,用逗号分隔。当用户点击“排序”按钮时,将会提交表单数据到sort.jsp页面。在sort.jsp页面,我们首先接收表单提交的数据,然后将输入的数字字符串转换为整型数组。接着,我们调用排序算法进行排序,这里使用冒泡排序算法作为示例。最后,我们输出排序后的结果。 可以根据需要使用其他排序算法,例如插入排序、选择排序、快速排序等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值