数组常见几种排序方法

Java中几种常见的排序方法

 

1.冒泡排序

/**
	 * 对指定的数组进行排序 把最小的排出来,然后再排第二小的。。。。
	 * 
	 * @param arr
	 *            要排序的数组
	 * @return 返回排序之后的数组
	 */
	public int[] maopao(int[] arr) {//int[] :返回值类型
		for (int i = 0; i < arr.length; i++) {
			for (int j = i + 1; j < arr.length; j++) {//第i个与第i+1个比较再与第i+2个比较
				if (arr[i] > arr[j]) {
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;//把最小的比出来放在最前面
				}// end if
			}// end for{}
		}// end for{ {} }
		return arr;
	}// end int[] mapao()

 

2.选择排序

         每一趟从待排序的数据元素中选择最小的一个元素,顺序放在已排序好的数列的最后,知道全部排完:

/**
	 * 我怎么感觉和那个冒泡排序没什么区别啊? 选择排序
	 * 
	 * @param arr
	 * @return
	 */
	public int[] xuanze(int[] arr) {//int[] :返回值类型
		for (int i = 0; i < arr.length; i++) {
			int lowerindex = i;
			// 找出最小值的索引
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[j] < arr[lowerindex]) {
					lowerindex = j;
				}//end if()
			}//end for(){}
			// 交换
			int temp = arr[i];
			arr[i] = arr[lowerindex];
			arr[lowerindex] = temp;
		}//end for{ {} }
		return arr;
	}//end int[] xuanze

 选择排序示例:

        初始关键字 [49 38 65 97 76 13 27 49]

  第一趟排序后 13 [38 65 97 76 49 27 49] //直接把13取出来

  第二趟排序后 13 27 [65 97 76 49 38 49] //再把27取出

  第三趟排序后 13 27 38 [97 76 49 65 49]

  第四趟排序后 13 27 38 49 [76 97 65 49 ]

  第五趟排序后 13 27 38 49 49 [97 65 76]

  第六趟排序后 13 27 38 49 49 65 [97 76]

  第七趟排序后 13 27 38 49 49 65 76 [97]

  最后排序结果 13 27 38 49 49 65 76 97

 

3.插入排序

         将一个数据插入到已经排好序的有序数据中,从而得到一个新的,个数加一的有序数据:

/**
	 * 插入排序
	 * 
	 * @param arr
	 * @return
	 */
	public int[] charu(int[] arr) {// int[] :返回值类型
		for (int i = 1; i < arr.length; i++) {
			for (int j = i; j > 0; j--) {
				if (arr[j] < arr[j - 1]) {// 与自己前面的比较
					int temp = arr[j];// 交换
					arr[j] = arr[j - 1];
					arr[j - 1] = temp;
				}// end if()
			}// end for(){}
		}// end for for()
		return arr;
	}// end int[]charu

 插入排序示例:

 

4.希尔排序

        插入排序的一种(还不怎么懂);

/**
	 * 希尔排序
	 * 
	 * @param arr
	 * @return
	 */
	public int[] shell(int[] arr) {
		// 分组
		for (int increment = arr.length / 2; increment > 0; increment /= 2) {
			// 每个组内排序
			for (int i = increment; i < arr.length; i++) {
				int temp = arr[i];
				int j = 0;
				for (j = i; j > increment; j -= increment) {
					if (temp < arr[i - increment]) {
						arr[j] = arr[i - increment];
					} else {
						break;
					}// end if
				}// end for{}
				arr[j] = temp;
			}// end for for{}
		}// end for for for{}
		return arr;
	}// end shell(){}

 

### JavaScript 中数组常见排序方法 #### 使用 `sort()` 方法按字符串顺序排序 `sort()` 是 JavaScript 中最常用的数组排序函数,默认情况下该方法依据转换成字符串后的字符编码顺序进行排列。对于仅含纯数字或字母的简单数组,这通常能给出预期的结果。 ```javascript let numbers = [30, 4, 26, 9]; numbers.sort(); console.log(numbers); // 输出: [26, 30, 4, 9], 这并不是数值上的正确排序[^1] ``` 为了实现基于实际数值大小而非其字符串表示形式的比较,可以在调用 `sort()` 函数时提供自定义的比较函数作为参数: ```javascript // 正确处理整数类型的升序排列 numbers.sort((a, b) => a - b); console.log(numbers); // 输出: [4, 9, 26, 30] // 对于浮点数同样适用 let decimals = [0.7, 0.1, 0.5]; decimals.sort((a, b) => a - b); console.log(decimals); // 输出: [0.1, 0.5, 0.7] ``` 当涉及到更复杂的数据结构比如对象数组时,则可以通过指定要用来决定顺序的对象属性来进行排序操作: ```javascript var people = [ { name: 'Alice', age: 25 }, { name: 'Bob', age: 20 } ]; people.sort(function (personA, personB) { return personA.age - personB.age; }); console.log(people); /* 结果将是按照年龄从小到大的人员列表 */ ``` 此外还有其他几种经典的算法可用于手动编写排序逻辑,例如冒泡排序等,不过这些一般较少直接应用于现代Web开发实践中因为内置的方法已经足够高效[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值