五种基本算法

 

代码
   
     
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;

}

}

}
}

 

你可能感兴趣的:(算法)