using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Sort();
int[] arr = new int[] { 6, 3, 8, 4, 6, 3, 2,5,6,8 };
XESort(arr,7);
}
}
//插入排序:从第二个数据开始,遍历所有元素,作为基准点;然后遍历这个基准点之前的所有元素和这个数据进行比较,
//然后判断,数据大小,大的后移,利用j--,一直找到合适的位置,然后arr[j]=temp;赋值即可
private void Sort()
{
int[] arr = new int[] { 56,12,34,45,22,34,56,23,45,67};
int i, j, temp;
for (i = 0; i < arr.Length; i++)
{
temp = arr[i];
for (j = i; j > 0; j--)
{
if (temp < arr[j - 1])
{
arr[j] = arr[j - 1];
}
else
{
break;
}
}
arr[j] = temp;
}
}
//希尔排序
private void XESort(int[] a, int n)
{
// int[] arr = new int[] { 6, 3, 8, 4, 6, 3, 2,5,6,8 };
int i, j, h,temp;
for (h = n / 2; h > 0; h = h / 2)//循环所得 增量值
{
for (i = h; i < n; i++)//循环的到点值
{
temp = a[i];//把点值付给temp
for (j = i - h; j >= 0 && temp < a[j]; j = j - h)
{
a[j + h] = a[j];
}
a[j + h] = temp;//很多情况下这个j为负值-1
}
}
}
//冒泡排序
private void MPSort()
{
int[] arr = new int[] { 6, 3, 8, 4, 6, 3, 2, 5, 6, 8 };
int middleVal;
bool flag = false; //交换标志
for (int i = 1; i < arr.Length; i++)
{
flag = false;
for (int j = arr.Length - 1; j >= i; j--)
{
if (arr[i] < arr[j - 1])
{
middleVal = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = middleVal;
flag = true;
}
}
if (!flag) //如果没有发生交换,终止算法
return;
}
}
//快速排序
private static void QuickSort(int lowest, int highest)
{
int[] array = new int[] { 49, 38, 65, 97, 76, 13, 27, 49 };
if (array == null || lowest < 0 || lowest >= highest || highest >= array.Length)
{
return;
}
int low = lowest;
int high = highest;
int key = low++;
for (; low <= high; )
{
if (key < high)
{
if (array[key] > array[high])
{
array[high] = array[key] + (array[key] = array[high]) * 0;
key = high;
}
high--;
}
if (key > low)
{
if (array[key] < array[low])
{
array[low] = array[key] + (array[key] = array[low]) * 0;
key = low;
}
low++;
}
}
for (int i = 0; i < array.Length; i++)
{
Console.Write(array[i] + ", ");
}
Console.WriteLine();
QuickSort(lowest, key - 1);
QuickSort(key + 1, highest);
}
//选择排序
//从第一个开始 每一个他后边的所有进行比较,如果前边的大于后边的那么两者交换值,最小的值在前边,最大的值在最后 ------- 命名;向后扫描法
protected void Button2_Click(object sender, EventArgs e)
{
int[] arr = new int[] { 49, 38, 65, 97, 76, 13, 27, 49 };
int min, tmp;
for (int i = 0; i < arr.Length - 1; i++)
{
min = i;
for (int j = i + 1; j < arr.Length; j++)
{
string a = arr[min].ToString();
string b = arr[j].ToString();
if (arr[min] > arr[j])
{
min = j;//每一个for循环一遍的到一个每次中的最小的值的索引
}
}
tmp = arr[i];
arr[i] = arr[min];
arr[min] = tmp;
}
foreach (var a in arr)
{
Response.Write(a + ",");
}
}
}