直接插入排序:
public 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;
}
}
}
简单选择排序:
//简单选择排序
public 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;
}
}
}
冒泡排序:
//冒泡排序:
public void SeqSort(int[] dataArray)
{
for (int i = 0; i < dataArray.Length ; i++)
{
for (int j = 0; j < dataArray.Length-1; j++)
{
if (dataArray[j] > dataArray[j + 1])
{
int temp = dataArray[j];
dataArray[j] = dataArray[j + 1];
dataArray[j + 1] = temp;
}
}
}
}
判断排序
public void DeciseSort(int[] dataArray)
{
bool isSwap = true;
do
{
isSwap = false;
for (int i = 0; i < dataArray.Length - 1; i++)
{
if (dataArray[i] > dataArray[i + 1])
{
int temp = dataArray[i];
dataArray[i] = dataArray[i + 1];
dataArray[i + 1] = temp;
isSwap = true;
}
}
} while (isSwap);
}
快速排序:
快速排序的思想:先定义一个值,i=0,j=7,k=a[0];把数组分成两部分,把比k大的放右边,比k小的放左边,先从右往左查找,查找到一个比k小的值,让这个值与k交换,然后在从左往右查找,查找到一个比k大的值,与k交换,记住i,j的索引,然后继续循环查找,直到i=j的时候,在对两边分别排序
//快速排序
//对数组dataArray中索引从left到right之间的数做排序
//dataArray要排序的数组
//left要排序数据的开始索引
//right要排序数据的结束索引
public 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是中间位置 left-i-right
dataArray[i] = x;
QuickSort(dataArray, left, i - 1);
QuickSort(dataArray, i + 1, right);
}
}