关于排序

一、桶排序

注:这里讲到的桶排序,并不是真正意义上的桶排序(简化版),因为真正的桶排序实现远比这个要复杂。

桶排序,就主要看数据的范围。范围有多大,开辟的数组空间就有多大。简单理解就是,用桶去装数

优点:高效易理解
缺点:空间消耗较大、更适合数据集中的情况(且只适用于int整型)

//桶排序 
//例子:5个<=10的随机数,按从大到小的顺序排序 
#include<stdio.h>
#include<stdlib.h>
#define N 11
int main()
{
	int arr[N] = {0};
	for(int i = 0; i < 5; i++)
	{
		arr[rand()%10+1]++;//把随机数装进“桶”里
	}
	for(int i = N-1; i >= 0; i--)
	{
		if(arr[i] == 0)
			continue;
		for(int j = 0; j < arr[i]; j++)//“桶”里有几个数就重复打印几遍
			printf("%d ", i);
	}
    return 0;
}

二、冒泡排序

冒泡排序,它弥补了桶排序的不足:节约了空间、适用多种数据类型(用结构体)。

但是它的时间复杂度很高,达到了O(n*n),它适合数据不多的情况。

//冒泡排序
//基本思想:每次比较两个相邻的元素,如果顺序就交换位置
//例子:12 35 99 18 76,从大到小排序 
#include<stdio.h>
int main()
{
	int arr[5], sum;
	for(int i = 0;i < 5; i++)
		scanf("%d", &arr[i]);
	for(int i = 0;i < 5-1; i++)//有n个数就需要走n-1趟 ,每趟确定最后一个数的位置(最后一个数归位) 
	{
		for(int j = 0;j < 5-i; j++)//每趟, 
		{
			if(arr[j] < arr[j+1])//与相邻的数进行比较 
			{
				sum = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = sum;
			}
		}
	}
	for(int i = 0;i < 5; i++)
	{
		printf("%d ",arr[i]);
	}
    return 0;
} 

三、快速排序

快速排序,见名思意,是一个比较高效的算法。它的核心思想是 分治

它会要找一个基准数,简单的来说是参考数(一般取第一个数或者是最后一个数),然后对剩余元素进行排序,大于基准数的放在右边,小于基准数的放在左边(顺序默认从小到大),再把基准数归位,接着再对左、右边部分进行类似操作,直至全部排序完。

特点:每一轮都会把基准数归位
它的平均时间复杂度为O(NlogN),但是,最差的时间复杂度与冒泡排序一样为O(N*N)

//快速排序
//例:给定 6 1 2 7 9 3 4 5 10 8,现在要求用快排给他们排序(从小到大) 
#include<stdio.h>
void q_sort(int *arr, int start, int end)
{
	int i, j, temp, t;
	if(start > end)
		return;
	temp = arr[start];//选定基准数
	i = start;
	j = end;
	while(i!=j)
	{
		//从右往左找,特别注意!!!
        //因为当只有两个数需要排序时,也就不至于一开始就出现因为i==j而退出的情况了
		while(arr[j] >= temp && i < j)
			j--;
		while(arr[i] <= temp && i < j)
			i++;
		if(i < j)
		{
			t = arr[i];
			arr[i] = arr[j];
			arr[j] = t;
		} 
	}
	//基准数归位
	arr[start] = arr[i];
	arr[i] = temp; 
	q_sort(arr, start, i-1);//对左边进行排序
	q_sort(arr, i+1, end);//对右边进行排序
} 
int main()
{
	int arr[10];
	for(int i = 0;i < 10; i++)
		scanf("%d", &arr[i]);
	q_sort(arr, 0, 10-1);	
	for(int i = 0;i < 10; i++)
		printf("%d ",arr[i]);
	printf("\n"); 
	return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个使用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、付费专栏及课程。

余额充值