冒泡排序的10种实现方式
时间: 2023-08-17 13:18:15 浏览: 28
以下是冒泡排序的10种实现方式:
1. 基本冒泡排序:
```
function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i < len; i++) {
for (let j = 0; j < len - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
```
2. 改进版冒泡排序:
```
function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i < len; i++) {
let flag = true;
for (let j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
flag = false;
}
}
if (flag) break;
}
return arr;
}
```
3. 双向冒泡排序:
```
function bubbleSort(arr) {
let len = arr.length;
let low = 0;
let high = len - 1;
while (low < high) {
let flag = true;
for (let i = low; i < high; i++) {
if (arr[i] > arr[i + 1]) {
[arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
flag = false;
}
}
high--;
for (let i = high; i > low; i--) {
if (arr[i] < arr[i - 1]) {
[arr[i], arr[i - 1]] = [arr[i - 1], arr[i]];
flag = false;
}
}
low++;
if (flag) break;
}
return arr;
}
```
4. 鸡尾酒排序:
```
function bubbleSort(arr) {
let len = arr.length;
let low = 0;
let high = len - 1;
while (low < high) {
let flag = true;
for (let i = low; i < high; i++) {
if (arr[i] > arr[i + 1]) {
[arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
flag = false;
}
}
high--;
for (let i = high; i > low; i--) {
if (arr[i] < arr[i - 1]) {
[arr[i], arr[i - 1]] = [arr[i - 1], arr[i]];
flag = false;
}
}
low++;
if (flag) break;
}
return arr;
}
```
5. 最简单的冒泡排序:
```
function bubbleSort(arr) {
for (let i = arr.length - 1; i >= 0; i--) {
for (let j = 0; j < i; j++) {
arr[j] > arr[j + 1] && ([arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]);
}
}
return arr;
}
```
6. 优化版冒泡排序:
```
function bubbleSort(arr) {
for (let i = arr.length - 1, tmp; i > 0; i--) {
for (let j = 0; j < i; j++) {
arr[j] > arr[j + 1] && ((tmp = arr[j]), (arr[j] = arr[j + 1]), (arr[j + 1] = tmp));
}
}
return arr;
}
```
7. 递归实现冒泡排序:
```
function bubbleSort(arr, len = arr.length - 1) {
if (len === 0) return arr;
for (let i = 0; i < len; i++) {
arr[i] > arr[i + 1] && ([arr[i], arr[i + 1]] = [arr[i + 1], arr[i]]);
}
return bubbleSort(arr, len - 1);
}
```
8. 带标志位的冒泡排序:
```
function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i < len; i++) {
let flag = true;
for (let j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
flag = false;
}
}
if (flag) return arr;
}
return arr;
}
```
9. 稳定冒泡排序:
```
function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i < len; i++) {
let flag = true;
for (let j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
flag = false;
} else if (arr[j] === arr[j + 1]) {
continue;
}
}
if (flag) return arr;
}
return arr;
}
```
10. 奇偶排序:
```
function bubbleSort(arr) {
let len = arr.length;
let sorted = false;
while (!sorted) {
sorted = true;
for (let i = 0; i < len - 1; i += 2) {
if (arr[i] > arr[i + 1]) {
[arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
sorted = false;
}
}
for (let i = 1; i < len - 1; i += 2) {
if (arr[i] > arr[i + 1]) {
[arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
sorted = false;
}
}
}
return arr;
}
```