C# 四种基本排序算法(冒泡排序,插入排序,选择排序,快速排序)外加折半排序
View
class Program
{
static void Main(string[] args)
{
//BubbleSort();
//SelectSort();
//int[] arr = new int[] { 49, 38, 65, 97, 76, 13, 27 };
int[] arr = GetNumber();
QuickSort(arr, 0, arr.Length - 1);
for (int i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] + " ");
}
Console.Read();
}
#region Random a new number
public static int[] GetNumber()
{
int[] arr = new int[10];
Random random = new Random();
for (int i = 0; i < 10; i++)
{
arr[i] = random.Next(DateTime.Now.Millisecond);
}
return arr;
}
#endregion Random a new number
#region 冒泡排序
public static void BubbleSort(int[] arr)
{
//int[] arr = new int[] { 13, 4, 6, 3, 8 };
int temp;
for (int i = 0; i < arr.Length - 1; i++)
{
for (int j = 0; j < arr.Length - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
#endregion 冒泡排序
#region 插入排序
public static void InsertSort(int[] arr)
{
//int[] arr = new int[] { 13, 4, 6, 3, 8 };
int i, j, temp;
for (i = 1; i < arr.Length; i++)
{
temp = arr[i];
for (j = i; j > 0; j--)
{
if (temp < arr[j - 1] && j > 0)
{
arr[j] = arr[j - 1];
}
else
break;
}
arr[j] = temp;
}
}
#endregion 插入排序
#region 选择排序
public static void SelectSort(int[] arr)
{
//int[] arr = new int[] { 13, 4, 6, 3, 8 };
int min, temp;
for (int i = 0; i < arr.Length - 1; i++)
{
min = i;
arr[min] = arr[i];
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[min] > arr[j])
{
min = j;
}
}
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
#endregion 选择排序
#region 快速排序
public static void QuickSort(int[] arr, int left, int right)
{
int position;
if (left < right)
{
position = KeyValuePosition(arr, left, right);
QuickSort(arr, left, position - 1);
QuickSort(arr, position + 1, right);
}
}
//Get keyValuePosition
public static int KeyValuePosition(int[] arr, int left, int right)
{
//int[] arr = new int[] { 49, 38, 65, 97, 76, 13,27 };
int low = left, high = right, key = arr[left];
while (low < high)
{
while (arr[high] > key)
{
high--;
}
if (low < high)
{
arr[low++] = arr[high];
}
while (arr[low] < key && low < high)
{
low++;
}
if (low < high)
{
arr[high--] = arr[low];
}
}
arr[low] = key;
return low;
}
#endregion 快速排序
}
#region 折半插入排序
private static void binaryInsertSort(int[] arr)
{
for (int i = 1; i < arr.Length; i++)
{
if (arr[i] >= arr[i - 1])
continue;//为什么吾加就有错呢
int temp = arr[i], j;
int low = 0, high = i - 1, tem;
while (low <= high)
{
tem = (low + high) / 2;
if (temp > arr[tem])
{
low = tem + 1;
}
else if (temp < arr[tem])
{
high = tem - 1;
}
else
break;
}
j = i;
while (low < j)
{
arr[j] = arr[j - 1];
j--;
}
arr[j] = temp;
}
for (int i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] + " ");
}
Console.Read();
}
#endregion 折半插入排序
Code
class Program { static void Main(string[] args) { //BubbleSort(); //SelectSort(); //int[] arr = new int[] { 49, 38, 65, 97, 76, 13, 27 }; int[] arr = GetNumber(); QuickSort(arr, 0, arr.Length - 1); for (int i = 0; i < arr.Length; i++) { Console.Write(arr[i] + " "); } Console.Read(); } #region Random a new number public static int[] GetNumber() { int[] arr = new int[10]; Random random = new Random(); for (int i = 0; i < 10; i++) { arr[i] = random.Next(DateTime.Now.Millisecond); } return arr; } #endregion Random a new number #region 冒泡排序 public static void BubbleSort(int[] arr) { //int[] arr = new int[] { 13, 4, 6, 3, 8 }; int temp; for (int i = 0; i < arr.Length - 1; i++) { for (int j = 0; j < arr.Length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } for (int i = 0; i < arr.Length; i++) { Console.Write(arr[i] + " "); } } #endregion 冒泡排序 #region 插入排序 public static void InsertSort(int[] arr) { //int[] arr = new int[] { 13, 4, 6, 3, 8 }; int i, j, temp; for (i = 1; i < arr.Length; i++) { temp = arr[i]; for (j = i; j > 0; j--) { if (temp < arr[j - 1] && j > 0) { arr[j] = arr[j - 1]; } else break; } arr[j] = temp; } } #endregion 插入排序 #region 选择排序 public static void SelectSort(int[] arr) { //int[] arr = new int[] { 13, 4, 6, 3, 8 }; int min, temp; for (int i = 0; i < arr.Length - 1; i++) { min = i; arr[min] = arr[i]; for (int j = i + 1; j < arr.Length; j++) { if (arr[min] > arr[j]) { min = j; } } temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } } #endregion 选择排序 #region 快速排序 public static void QuickSort(int[] arr, int left, int right) { int position; if (left < right) { position = KeyValuePosition(arr, left, right); QuickSort(arr, left, position - 1); QuickSort(arr, position + 1, right); } } //Get keyValuePosition public static int KeyValuePosition(int[] arr, int left, int right) { //int[] arr = new int[] { 49, 38, 65, 97, 76, 13,27 }; int low = left, high = right, key = arr[left]; while (low < high) { while (arr[high] > key) { high--; } if (low < high) { arr[low++] = arr[high]; } while (arr[low] < key && low < high) { low++; } if (low < high) { arr[high--] = arr[low]; } } arr[low] = key; return low; } #endregion 快速排序 }
生命不息,奋斗不止

浙公网安备 33010602011771号