一、冒泡排序算法
冒泡排序算法是程序设计中一种较简单的排序算法,其原理是重复的对要排序的数进行大小比较,一次比较两个元素,如果第一个数比第二个数大,则交换顺序,把第二个小的数放在前面,不断比较,直到形成一串由小到大排序的数字
时间复杂度:如果文件的初始状态是正序的 那么时间复杂度为O(n)
如果初始文件时反序的 那么时间复杂度是O(n的平方)
综上所述 冒泡排序总的平均时间复杂度为O(n的平方)
冒泡排序算法就是把小的元素往前调或者把大的元素往后调,比较相邻的两个元素的大小,交换也发生在这两个元素之间,所以如果两个元素相等,是不会再交换的,如果两个相等的元素没有相邻,那么即使通过前面的两两交换使两个元素相邻,这时也不会再交换,所以相同元素的前后顺序并没有改变,所以冒泡排序算法是一种稳定排序算法
测试代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_13_1 : MonoBehaviour
{
void Start()
{
//测试数据
int[] array = { 1, 4, 2, 43, 5, 61, 89, 34, 67, 32, 40 };
//将数据排序
PopSort(array);
//排序后的数据
for (int i = 0; i < array.Length; i++)
{
Debug.Log(array[i]);
}
}
public void PopSort(int[] _item)
{
int i, j, temp; //先定义一下要用的变量
for (i = 0; i < _item.Length - 1; i++)
{
for (j = i + 1; j < _item.Length; j++)
{
if (_item[i] > _item[j]) //降序改为“<”
{
//交换两个数的位置
temp = _item[i]; //把大的数放在一个临时存储位置
_item[i] = _item[j]; //然后把小的数赋给前一个
_item[j] = temp; //然后把临时位置的那个大数赋给后一个
}
}
}
}
}
二、选择排序算法
选择排序算法是一种简单直观的排序算法
首先从待排序的数据元素中选出最小或者最大的一个元素,存放到序列的起始位置,其次再从剩余的未排序元素中寻找到最小或者最大的一个元素,然后放到已排序的序列的末尾,以此类推,直到待排序的数据元素的个数为0
选择排序算法是不稳定的排序方法、
选择排序算法总的平均时间复杂度为O(n的平方)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_13_2 : MonoBehaviour
{
void Start()
{
//测试数据
int[] array = { 1, 4, 2, 43, 5, 61, 89, 34, 67, 32, 40 };
//将数据排序
SelectionSort(array);
//排序后的数据
for (int i = 0; i < array.Length; i++)
{
Debug.Log(array[i]);
}
}
public void SelectionSort(int[] _item)
{
int i, j, min, len = _item.Length;
int temp;
for (i = 0; i < len - 1; i++)
{
min = i;
for (j = i + 1; j < len; j++)
{
if (_item[min].CompareTo(_item[j]) > 0)
{
min = j;
}
}
temp = _item[min];
_item[min] = _item[i];
_item[i] = temp;
}
}
}
三、插入排序算法
插入排序是将一个记录插入已经排好序的有序表中,从而增加一个元素,有序表记录数+1,在其实现过程中,使用了双层循环,外层循环寻找第一个元素之外的所有元素,内层循环在当前有序表中根据当前元素进行插入位置查找,然后进行移动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_13_3 : MonoBehaviour
{
void Start()
{
//测试数据
int[] array = { 1, 4, 2, 43, 5, 61, 89, 34, 67, 32, 40 };
//将数据排序
InsertSort(array);
//排序后的数据
for (int i = 0; i < array.Length; i++)
{
Debug.Log(array[i]);
}
}
public void InsertSort(int[] _item)
{
for (int i = 1; i < _item.Length; i++)
{
int temp = _item[i];
for (int j = i - 1; j >= 0; j--)
{
if (_item[j] > temp)
{
_item[j + 1] = _item[j];
_item[j] = temp;
}
}
}
}
}