您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# JavaScript、Python、Java实现选择排序的代码怎么写
## 目录
1. [选择排序算法原理](#选择排序算法原理)
2. [JavaScript实现](#javascript实现)
3. [Python实现](#python实现)
4. [Java实现](#java实现)
5. [算法复杂度分析](#算法复杂度分析)
6. [选择排序的优化](#选择排序的优化)
7. [不同语言实现的对比](#不同语言实现的对比)
8. [应用场景](#应用场景)
9. [总结](#总结)
## 选择排序算法原理
选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是:
1. 在未排序序列中找到最小(或最大)元素
2. 将其存放到排序序列的起始位置
3. 再从剩余未排序元素中继续寻找最小(或最大)元素
4. 重复上述过程,直到所有元素均排序完毕
时间复杂度:
- 最优/最差/平均时间复杂度均为O(n²)
- 空间复杂度O(1)
稳定性:不稳定排序算法
## JavaScript实现
### 基础实现
```javascript
function selectionSort(arr) {
const len = arr.length;
for (let i = 0; i < len - 1; i++) {
let minIndex = i;
// 在未排序部分寻找最小值
for (let j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 将最小值交换到已排序部分的末尾
if (minIndex !== i) {
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
}
}
return arr;
}
// 使用示例
const array = [64, 25, 12, 22, 11];
console.log(selectionSort(array)); // [11, 12, 22, 25, 64]
function optimizedSelectionSort(arr) {
let left = 0;
let right = arr.length - 1;
while (left < right) {
let minIndex = left;
let maxIndex = right;
// 确保minIndex <= maxIndex
if (arr[minIndex] > arr[maxIndex]) {
[arr[minIndex], arr[maxIndex]] = [arr[maxIndex], arr[minIndex]];
}
for (let i = left + 1; i < right; i++) {
if (arr[i] < arr[minIndex]) {
minIndex = i;
} else if (arr[i] > arr[maxIndex]) {
maxIndex = i;
}
}
// 交换最小值
[arr[left], arr[minIndex]] = [arr[minIndex], arr[left]];
// 交换最大值
[arr[right], arr[maxIndex]] = [arr[maxIndex], arr[right]];
left++;
right--;
}
return arr;
}
def selection_sort(arr):
n = len(arr)
for i in range(n - 1):
min_index = i
# 寻找未排序部分的最小值
for j in range(i + 1, n):
if arr[j] < arr[min_index]:
min_index = j
# 交换元素
if min_index != i:
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
# 使用示例
if __name__ == "__main__":
data = [64, 25, 12, 22, 11]
print(selection_sort(data)) # 输出: [11, 12, 22, 25, 64]
def concise_selection_sort(arr):
for i in range(len(arr)):
min_index = min(range(i, len(arr)), key=lambda x: arr[x])
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
public class SelectionSort {
public static void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
// 寻找未排序部分的最小元素
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换找到的最小元素
if (minIndex != i) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
public static void main(String[] args) {
int[] data = {64, 25, 12, 22, 11};
selectionSort(data);
System.out.println(Arrays.toString(data)); // [11, 12, 22, 25, 64]
}
}
public class GenericSelectionSort {
public static <T extends Comparable<T>> void selectionSort(T[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j].compareTo(arr[minIndex]) < 0) {
minIndex = j;
}
}
if (minIndex != i) {
T temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
public static void main(String[] args) {
Integer[] intArray = {64, 25, 12, 22, 11};
selectionSort(intArray);
System.out.println(Arrays.toString(intArray));
String[] strArray = {"banana", "apple", "orange", "grape"};
selectionSort(strArray);
System.out.println(Arrays.toString(strArray));
}
}
双向选择排序(鸡尾酒选择排序):
减少交换次数:
提前终止:
使用堆结构优化:
特性 | JavaScript | Python | Java |
---|---|---|---|
语法简洁性 | 中等 | 最高 | 较低 |
类型系统 | 动态类型 | 动态类型 | 静态类型 |
交换元素 | 解构赋值 | 多重赋值 | 临时变量 |
泛型支持 | 天然支持 | 天然支持 | 需要泛型声明 |
性能 | 中等(JIT优化) | 较慢(解释型) | 快(JIT优化) |
适用场景 | 网页前端 | 数据分析/脚本 | 企业级后端 |
尽管选择排序效率不高,但在某些情况下仍有应用价值:
小规模数据排序:
内存受限环境:
特定需求:
教学用途:
选择排序虽然时间复杂度较高,但作为一种基础排序算法:
优点:
缺点:
学习价值:
在实际开发中,JavaScript、Python和Java都提供了更高效的排序方法(如Array.prototype.sort()、sorted()、Collections.sort()),但理解选择排序的实现原理对于编程能力的提升大有裨益。
”`
注:本文实际字数约2500字,完整3000字版本可扩展以下内容: 1. 更多优化变种的代码实现 2. 各语言内置排序方法的对比 3. 详细的性能测试数据 4. 选择排序与其他简单排序(冒泡、插入)的对比 5. 实际工程中的应用案例
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。