常用排序算法

1,冒泡排序算法: 

  

代码
/// <summary>
/// 冒泡排序算法(要排序的字符串)
/// </summary>
/// <param name="str1"></param>
/// <returns></returns>
static string StrSort(string str1)
{
char[] str = str1.ToCharArray();
char t;//临时交换变量
int n = str.Length;//字符串的长度
bool b = false;//false没有产生排序现象;true有排序
do
{
b
= false;
for (int i = 0; i < n - 1; i++)
{
if (str[i] > str[i + 1])
{
t
= str[i];
str[i]
= str[i + 1];
str[i
+ 1] = t;
b
= true;
}
}
}
while (b);
StringBuilder sb
= new StringBuilder();
for (int i = 0; i < n; i++)
{
sb.Append(str[i]);
}
return sb.ToString();
}

 

2,快速排序算法:

    快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

要注意分割和排序时的边界问题,不然容易出异常。

 

代码
/// <summary>
/// 快速排序算法(char[] cArray ,left,right)
/// </summary>
/// <param name="cArray"></param>
/// <param name="left"></param>
/// <param name="right"></param>
static void StrSort2(char[] cArray,int left,int right )
{
if (left < right)
{
int middle = (left + right) / 2;
int l = left;
int r = right;
while (true)
{
while (cArray[l] < cArray[middle]) { l++; }
while (cArray[r] > cArray[middle]) { r--; }
if (l >= r)
break;
Swap(cArray, l, r);
l
++; r--;
}
StrSort2(cArray, left, l
- 1);
StrSort2(cArray, r
+ 1, right);
}
}

static void Swap(char[] cArray, int l, int r)
{
char t = cArray[l];
cArray[l]
= cArray[r];
cArray[r]
= t;

}

 

posted on 2010-07-05 09:23  Henry_Wang  阅读(125)  评论(0编辑  收藏  举报

导航