using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Algorithm : MonoBehaviour
{
//排序算法
public int[] arr = { 0, 5, 7, 6, 9, 4, 3, 2, 8, 1 };
private void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
BubbleSort();
} if (Input.GetKeyDown(KeyCode.S))
{
SelectionSort();
} if (Input.GetKeyDown(KeyCode.D))
{
InsertionSortFor();
} if (Input.GetKeyDown(KeyCode.F))
{
InsertionSortWhile();
} if (Input.GetKeyDown(KeyCode.G))
{
InsertSortBinary(arr);
} if (Input.GetKeyDown(KeyCode.H))
{
ShellSortHibbard(arr);
}
}
/// <summary>
/// 三种交换方式
/// </summary>
#region 三种交换方式
// 方法一: 利用临时数tmp
private void swap(int[] arr, int i, int j)
{
/*int tmp = arr[i];
arr[i] = arr[j+1];
arr[j+1] = tmp;*/
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
// 方法二: 利用加减运算
private void swapCal(int[] arr, int i, int j)
{
if (i == j) return; // 若无法保证swapCal被调用时满足 i != j,则需有此句,否则i == j时此数将变为0
arr[i] = arr[i] + arr[j]; // a = a + b
arr[j] = arr[i] - arr[j]; // b = a - b
arr[i] = arr[i] - arr[j]; // a = a - b
}
// 方法三: 利用异或运算
private void swapXOR(int[] arr, int i, int j)
{
if (i == j) return; // 若无法保证swapXOR被调用时满足 i != j,则需有此句,否则i == j时此数将变为0
arr[i] = arr[i] ^ arr[j]; // a = a ^ b,也可写成 arr[i] ^= arr[j];
arr[j] = arr[i] ^ arr[j]; // b = (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a, 也可写成 arr[j] ^= arr[i];
arr[i] = arr[i] ^ arr[j]; // a = (a ^ b) ^ a = (a ^ a) ^ b = 0 ^ b = b, 也可写成 arr[i] ^= arr[j];
}
#endregion
/// <summary>
/// 算法
///