Unity中常用的几种排序总结(冒泡,快速,简单选择,直接插入)

个人心得:对于排序重在理解思想,不需要死记硬背,理解思想再不看代码情况下就可以直接写出,注意排序的分界点

******************************************冒泡**********************************************

for (int j = 1; j <= str.Length - 1; j++)//外层for循环用来控制子for循环执行的次数
{
//让下面的for循环执行length-1次
for (int i = 0; i < numArray.Length - 1-j+1; i++) {
//numArray[i] numArray[i+1]做比较 把最大的放在后面
if (numArray[i + 1] < numArray[i]) {
int temp = numArray[i];
numArray[i] = numArray[i + 1];
numArray[i + 1] = temp;
}
}
}

思想:两个数字进行比较,满足条件,交换位置,依次进行

*****************************************快速*******************************************

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _008_快速排序 {
class Program {
/// <summary>
/// 对数组dataArray中索引从left到right之间的数做排序
/// </summary>
/// <param name="dataArray">要排序的数组</param>
/// <param name="left">要排序数据的开始索引</param>
/// <param name="right">要排序数据的结束索引</param>
static void QuickSort(int[] dataArray, int left, int right)
{
if (left < right)
{
int x = dataArray[left];//基准数, 把比它小或者等于它的 放在它的左边,然后把比它大的放在它的右边
int i = left;
int j = right;//用来做循环的标志位
while (true &&i<j )//当i==j的时候,说明我们找到了一个中间位置,这个中间位置就是基准数应该所在的位置
{
//从后往前比较(从右向左比较) 找一个比x小(或者=)的数字,放在我们的坑里 坑位于i的位置
while (true && i < j) {
if (dataArray[j] <= x) //找到了一个比基准数 小于或者等于的数子,应该把它放在x的左边
{
dataArray[i] = dataArray[j];
break;
} else {
j--;//向左移动 到下一个数字,然后做比较
}
}

//从前往后(从左向右)找一个比x大的数字,放在我们的坑里面 现在的坑位于j的位置
while (true && i < j) {
if (dataArray[i] > x) {
dataArray[j] = dataArray[i];
break;
} else {
i++;
}
}
}
//跳出循环 现在i==j i是中间位置
dataArray[i] = x;// left -i- right
QuickSort(dataArray,left,i-1);
QuickSort(dataArray,i+1,right);
}
}

static void Main(string[] args) {
int[] data = new int[] { 42, 20, 17, 27, 13, 8, 17, 48 };
QuickSort(data,0,data.Length-1);

foreach (var temp in data) {
Console.Write(temp + " ");
}
Console.ReadKey();
}
}
}
******************************************************简单选择*************************************************

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _007_简单选择排序 {
class Program {
static void SelectSort(int[] dataArray)
{
for (int i = 0; i < dataArray.Length-1; i++)
{
int min = dataArray[i];
int minIndex = i;//最小值所在索引
for (int j = i+1; j < dataArray.Length; j++)
{
if (dataArray[j] < min)
{
min = dataArray[j];
minIndex = j;
}
}
if (minIndex != i)
{
int temp = dataArray[i];
dataArray[i] = dataArray[minIndex];
dataArray[minIndex] = temp;
}
}
}
static void Main(string[] args) {
int[] data = new int[] { 42, 20, 17, 27, 13, 8, 17, 48 };
SelectSort(data);
foreach (var temp in data) {
Console.Write(temp + " ");
}
Console.ReadKey();
}
}
}

***********************************************直接插入*****************************************

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _006_直接插入排序 {
class Program {
static void InsertSort(int[] dataArray)
{
for (int i = 1; i < dataArray.Length; i++)
{
int iValue = dataArray[i];
bool isInsert = false;
//拿到i位置的元素 跟前面所有的元素做比较
//如果发现比i大的,就让它向后移动
for (int j = i-1; j >=0; j--)
{
if (dataArray[j] > iValue)
{
dataArray[j + 1] = dataArray[j];
}
else
{
//发现一个比i小的值就不移动了
dataArray[j+1] = iValue;
isInsert = true;
break;
}
}
if (isInsert == false)
{
dataArray[0] = iValue;
}
}
}

static void Main(string[] args) {
int[] data = new int[]{42,20,17,27,13,8,17,48};
InsertSort(data);
foreach (var temp in data)
{
Console.Write(temp+" ");
}
Console.ReadKey();
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W低小调W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值