五种基本算法

代码
class Sorter
{

//选择排序法实现

private int min;

public void Sort1(int[] arr)
{

for (int i = 0; i < arr.Length - 1; ++i)
{

min
= i;

for (int j = i + 1; j < arr.Length; ++j)
{

if (arr[j] < arr[min])

min
= j;

}

int t = arr[min];

arr[min]
= arr[i];

arr[i]
= t;

}

}

//冒泡排序法实现

public void Sort2(int[] arr)
{

int i, j, temp;

bool done = false;

j
= 1;

while ((j < arr.Length) && (!done))//判断长度
{

done
= true;

for (i = 0; i < arr.Length - j; i++)
{

if (arr[i] > arr[i + 1])
{

done
= false;

temp
= arr[i];

arr[i]
= arr[i + 1];//交换数据

arr[i
+ 1] = temp;

}

}

j
++;

}

}

private void swap(ref int l, ref int r)
{

int temp;

temp
= l;

l
= r;

r
= temp;

}

//快速排序法实现

public void Sort3(int[] list, int low, int high)
{

int pivot;//存储分支点

int l, r;

int mid;

if (high <= low)

return;

else if (high == low + 1)
{

if (list[low] > list[high])

swap(
ref list[low], ref list[high]);

return;

}

mid
= (low + high) >> 1;

pivot
= list[mid];

swap(
ref list[low], ref list[mid]);

l
= low + 1;

r
= high;

do
{

while (l <= r && list[l] < pivot)

l
++;

while (list[r] >= pivot)

r
--;

if (l < r)

swap(
ref list[l], ref list[r]);

}
while (l < r);

list[low]
= list[r];

list[r]
= pivot;

if (low + 1 < r)

Sort3(list, low, r
- 1);

if (r + 1 < high)

Sort3(list, r
+ 1, high);

}

//插入排序法实现

public void Sort4(int[] arr)
{

for (int i = 1; i < arr.Length; i++)
{

int t = arr[i];

int j = i;

while ((j > 0) && (arr[j - 1] > t))
{

arr[j]
= arr[j - 1];//交换顺序

--j;

}

arr[j]
= t;

}

}

//希尔排序法实现

public void Sort5(int[] arr)
{

int inc;

for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ;

for (; inc > 0; inc /= 3)
{

for (int i = inc + 1; i <= arr.Length; i += inc)
{

int t = arr[i - 1];

int j = i;

while ((j > inc) && (arr[j - inc - 1] > t))
{

arr[j
- 1] = arr[j - inc - 1];//交换数据

j
-= inc;

}

arr[j
- 1] = t;

}

}

}
}
原文地址:https://www.cnblogs.com/Snowolf/p/1912388.html