文章目录
目录
前言
本文是根据siki学院C#版数据结构课程写的笔记
提示:以下是本篇文章正文内容,下面案例可供参考
一、排序算法?
1、直接插入排序
代码示例:
直接插入排序
static void InsertSort(int[] Array)
{
for (int i = 1; i < Array.Length; i++)
{
int Value = Array[i];
bool isInsert = false;
//拿到i位置的元素,跟前面所有元素做比较
//如果发现比i大,就让他向后移动
for (int j = i - 1; j >= 0; j--)
{
if (Array[j] > Value)
{
Array[j + 1] = Array[j];
}
else
{
//发现比i小的,就不动,直接插入
Array[j + 1] = Value;
isInsert = true;
break;
}
}
if (isInsert == false)
{
Array[0] = Value;
}
}
}
2、冒泡排序
代码示例:
static void BubbleSort(int[] Array)
{
for (int i = 0; i < Array.Length - 1; i++)
{
for (int j = 0; j < Array.Length - 1 - i; j++)
{
if (Array[j] > Array[j + 1])
{
int temp = Array[j];
Array[j] = Array[j + 1];
Array[j + 1] = temp;
}
}
}
}
3、简单选择排序
代码示例:
简单选择排序
static void SelectSort(int[] Array)
{
for (int i = 0; i < Array.Length - 1; i++)
{
int min = Array[i];
int minIndex = i;
for (int j = i; j < Array.Length - 1; j++)
{
if (Array[j + 1] < min)
{
min = Array[j + 1];
minIndex = j + 1;
}
}
if (minIndex != i)
{
int temp = Array[i];
Array[i] = Array[minIndex];
Array[minIndex] = temp;
}
}
}
4、快速排序
算法详解
代码示例:
static void QuickSort(int[] Array,int left,int right)
{
if(left<right)
{
int x = Array[left];//基准数,把比她小的放左边,比他大的放右边
int i = left;
int j = right;//用来做循环标志位
while(i<j)//当i=j的时候,说明找到了中间位置,这个中间位置可以用来放基准数
{
//从左往右比较,找一个<=x的数字,放在坑里,坑是位于i的位置
while(i<j)
{
if (Array[j] <= x)//在右边找到了比基准数小的数
{
Array[i] = Array[j];
break;
}
else
{
j--;//向左移动,找到下一个数字,然后做比较
}
}
while(i<j)
{
if (Array[i]>x)
{
Array[j] = Array[i];
break;
}
else
{
i++;
}
}
}
//跳出循环 现在i==j i是中间位置
Array[i] = x;
QuickSort(Array, left, i - 1);
QuickSort(Array, 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();
}
static void QuickSort(int[] Array,int left,int right)
{
if (left >= right) return;
int x = Array[left];
int i = left;
int j = right;
while(i<j)
{
if (i <= j && Array[j] > x)
j--;
Array[i] = Array[j];
if (i < j && Array[i] <= x)
i++;
Array[j] = Array[i];
}
Array[i] = x;
QuickSort(Array, left, i - 1);
QuickSort(Array, j + 1, right);
}