冒泡排序:
static void PopSort(int[] arr)
{
for (var i = 0; i < arr.Length; i++)
{
for (var j = arr.Length - 1; j > i; j--)
{
if (arr[j] < arr[j - 1])
{
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
}
选择排序:
static void ChooseSort(int[] arr)
{
for (var i = 0; i < arr.Length; i++)
{
for (var j = i+1; j < arr.Length; j++)
{
if (arr[i] > arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
插入排序:
static void InsertSort(int[] arr)
{
for (int i = 1; i < arr.Length; i++)
{
int tmpVal = arr[i];
for (int j = 0; j < i; j++)
{
if (arr[i] < arr[j])
{
for (int k = i-1; k >= j; k--)
{
arr[k+1] = arr[k];
}
arr[j] = tmpVal;
break;
}
}
}
}
堆排序(堆排序分别采用了由父节点查找子节点以及由子节点查找父节点两种遍历方式,用户可根据自己需求使用):
static void DuiSort(int[] arr)
{
for (int i = 0; i<arr.Length ; i++)
{
MakeDuiFromChild(arr,i,arr.Length-1);
}
}
static void MakeDuiFromChild(int[] arr,int startIndex, int endIndex)
{
for (int m = endIndex; m >= startIndex; m--)
{
//根据子节点索引寻找父节点
int parentIndex = (m - startIndex - 1) / 2 + startIndex;
if (arr[m] < arr[parentIndex])
{
int tmpVal = arr[m];
arr[m] = arr[parentIndex];
arr[parentIndex] = tmpVal;
}
}
}
static void MakeDuiFromParent(int[] arr,int startIndex,int endIndex)
{
for (var m = endIndex; m >= startIndex; m--)
{
int childOneIndex = 2 * (m - startIndex) + 1 + startIndex;
int childTwoIndex = 2 * (m - startIndex) + 2 + startIndex;
if (childOneIndex <= endIndex)
{
if (arr[m] > arr[childOneIndex])
{
int tmpVal = arr[m];
arr[m] = arr[childOneIndex];
arr[childOneIndex] = tmpVal;
}
}
if (childTwoIndex <= endIndex)
{
if (arr[m] > arr[childTwoIndex])
{
int tmpVal = arr[m];
arr[m] = arr[childTwoIndex];
arr[childTwoIndex] = tmpVal;
}
}
}
}
由于本人从事于unity开发,习惯CSharp编程,特以CSharp语言为例,用户可根据自己工作方向使用自己习惯的编程语言,如果不对之处,可联系本人进行探讨