data = s.ToCharArray(); for (i = 0, tag = 1; tag == 1 && i < n - 1; i++) { tag = 0; for (j = 0; j < n - i - 1; j++) if (data[j] > data[j + 1]) { temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; tag = 1; } } s = CharArrayToString(data); } /// <summary> /// 直接插入排序 /// </summary> /// <param name="s">源字符串</param> /// <param name="n">对前n个字符进行排序</param> private void DirectInsertSort(ref string s, int n) { if (s.Length < 1) return; char[] data = s.ToCharArray(); int i, j, k; char t; for (i = 1; i < n; i++) { t = data[i]; for (j = 0; j < i; j++) if (data[j] > t) { for (k = i; k >= (j + 1); k--) data[k] = data[k - 1]; data[j] = t; break; } } s = CharArrayToString(data); } /// <summary> /// 希尔排序又称“缩小增量排序”,是对直接插入排序方法的改进。 /// 希尔排序的基本思想:先将整个待排记录序列分割成若干序列,然后分别进行直接插入 /// 排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。具体做法是 /// :先取定一个小于n的整数d1作为第一个增量,把序列的全部记录分成d1个组,将所有距离 /// d1倍数的记录放在同一个组,在各组中进行直接插入排序;然后取第二个增量d2<d1,重复 /// 上述分组和排序工作,依此类推,直至所取的增量di = 1(di<di-1<...<d1),即所有记 /// 录放在同一组内进行直接插入排序为止。 /// </summary> /// <param name="s">源字符串</param> /// <param name="n">对前n个字符进行排序</param> private void ShellSort(ref string s, int n) { char[] data = s.ToCharArray(); int[] delta = new int[(n / 2) + 1]; int k, i, dk, j; char t; k = n; i = 0; do {k = k / 2; delta[i++] = k;} while (k > 0); i = 0; while (delta[i] > 0) { dk = delta[i]; for (k = delta[i]; k < n; ++k) if (data[k] < data[k - dk]) //将元素data[k]插入到有序增量子表中 { t = data[k]; //备份待插入的元素,空出一个元素位置 for (j = k - dk; j >= 0 && t < data[j]; j -= dk) data[j + dk] = data[j]; //寻找插入位置的同时后移 data[j + dk] = t; //找到插入位置,插入元素 } ++i; //取下一个增量值 } s = CharArrayToString(data); }
写一个SortArr啊; procedure sortarr(var arr: TintArr,upindex:integer); var i,j,temp:integer; begin for i:=1 to upindex do begin k:=i; for j:=i to upindex do if arr[k]<a[j] then k=j; if k<>i then begin temp:=arr[i]; arr[i]:=arr[j]; a[j]:=temp; end; end;end;
procedure fSort(var inX:array of double); var temp:double; i,j,n:integer; flag:boolean; Begin for i:=Low(inX) to High(inX) do for j := Low(inX) to High(inX) - 1 do if inX[j] > inX[j + 1] then begin temp := inX[j]; inX[j] := inX[j + 1]; inX[j + 1] := temp; end;end;
To: bbm011(只爱花香) 我考试不久,严、吴的ds课本放下不久,我写的应该是对的,这是简单选择排序,你的才是真正的冒泡排序
To: bbm011(只爱花香) 我考试不久,严、吴的ds课本放下不久,我写的应该是对的,这是简单选择排序,你的才是真正的冒泡排序
To: bbm011(只爱花香) 我考试不久,严、吴的ds课本放下不久,我写的应该是对的,这是简单选择排序,你的才是真正的冒泡排序
/// 快速排序的基本思想:通过一趟排序将待排的内容分割为独立的两部分,其中一部分内
/// 容的关键字均比另一部分的关键字小,然后再分别对这两部分记录继续进行排序,以达到整
/// 个序列有序。
/// 一趟快速排序的具体做法是:附设两个指针Low和High,它们的初值分别指向待排内容
/// 的第一个记录和最后一个记录。设枢轴(通常是第一个记录)的关键字为pivot,则首先从
/// High所指位置向前搜索,找到第一个关键字小于pivot的记录并与枢轴记录互相交换,然后
/// 从所指位置起向后搜索,找到第一个关键字大于pivot的记录并与枢轴记录互相交换,重复
/// 这两步直至Low=High为止。
/// </summary>
/// <param name="str">要排序的字符串</param>
/// <param name="Low">下标(从哪个字符开始排序)</param>
/// <param name="High">上标(在哪个字符结束排序)</param>
private void QuickSort(ref string str, int Low, int High)
{
int i, j;
char pivot;
char[] s; s = str.ToCharArray();
if(Low < High) //以字符串的第一个字符作为基准进行划分
{
pivot = s[Low];
i = Low;
j = High;
while(i < j) //从字符串的两端交替的向中间扫描
{
while((i < j) && (s[j] >= pivot)) j--;
if (i < j) s[i++] = s[j]; //比枢轴元素小者移到低下标端
while((i < j) && (s[i] <= pivot)) i++;
if (i < j) s[j--] = s[i]; //比枢轴元素大者移到高下标端
}
s[i] = pivot; //枢轴元素移动到正确的位置
str = CharArrayToString(s);
QuickSort(ref str, Low, i - 1); //对前半个子表递归排序
QuickSort(ref str, i + 1, High); //对后半个子表递归排序
}
} /// <summary>
/// 冒泡排序
/// </summary>
/// <param name="s">源字符串</param>
/// <param name="n">对前n个字符进行排序</param>
private void BubbleSort(ref string s, int n)
{
char[] data;
char temp;
int i, j, tag;
data = s.ToCharArray();
for (i = 0, tag = 1; tag == 1 && i < n - 1; i++)
{
tag = 0;
for (j = 0; j < n - i - 1; j++)
if (data[j] > data[j + 1])
{
temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
tag = 1;
}
}
s = CharArrayToString(data);
} /// <summary>
/// 直接插入排序
/// </summary>
/// <param name="s">源字符串</param>
/// <param name="n">对前n个字符进行排序</param>
private void DirectInsertSort(ref string s, int n)
{
if (s.Length < 1) return; char[] data = s.ToCharArray();
int i, j, k;
char t; for (i = 1; i < n; i++)
{
t = data[i];
for (j = 0; j < i; j++)
if (data[j] > t)
{
for (k = i; k >= (j + 1); k--) data[k] = data[k - 1];
data[j] = t;
break;
}
}
s = CharArrayToString(data);
} /// <summary>
/// 希尔排序又称“缩小增量排序”,是对直接插入排序方法的改进。
/// 希尔排序的基本思想:先将整个待排记录序列分割成若干序列,然后分别进行直接插入
/// 排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。具体做法是
/// :先取定一个小于n的整数d1作为第一个增量,把序列的全部记录分成d1个组,将所有距离
/// d1倍数的记录放在同一个组,在各组中进行直接插入排序;然后取第二个增量d2<d1,重复
/// 上述分组和排序工作,依此类推,直至所取的增量di = 1(di<di-1<...<d1),即所有记
/// 录放在同一组内进行直接插入排序为止。
/// </summary>
/// <param name="s">源字符串</param>
/// <param name="n">对前n个字符进行排序</param>
private void ShellSort(ref string s, int n)
{
char[] data = s.ToCharArray();
int[] delta = new int[(n / 2) + 1];
int k, i, dk, j;
char t; k = n;
i = 0;
do {k = k / 2; delta[i++] = k;} while (k > 0);
i = 0;
while (delta[i] > 0)
{
dk = delta[i];
for (k = delta[i]; k < n; ++k)
if (data[k] < data[k - dk]) //将元素data[k]插入到有序增量子表中
{
t = data[k]; //备份待插入的元素,空出一个元素位置
for (j = k - dk; j >= 0 && t < data[j]; j -= dk)
data[j + dk] = data[j]; //寻找插入位置的同时后移
data[j + dk] = t; //找到插入位置,插入元素
}
++i; //取下一个增量值
}
s = CharArrayToString(data);
}
procedure sortarr(var arr: TintArr,upindex:integer);
var i,j,temp:integer;
begin
for i:=1 to upindex do
begin
k:=i;
for j:=i to upindex do
if arr[k]<a[j] then k=j;
if k<>i then
begin
temp:=arr[i]; arr[i]:=arr[j]; a[j]:=temp;
end;
end;end;
var temp:double;
i,j,n:integer;
flag:boolean;
Begin
for i:=Low(inX) to High(inX) do
for j := Low(inX) to High(inX) - 1 do
if inX[j] > inX[j + 1] then
begin
temp := inX[j];
inX[j] := inX[j + 1];
inX[j + 1] := temp;
end;end;
我考试不久,严、吴的ds课本放下不久,我写的应该是对的,这是简单选择排序,你的才是真正的冒泡排序
我考试不久,严、吴的ds课本放下不久,我写的应该是对的,这是简单选择排序,你的才是真正的冒泡排序
我考试不久,严、吴的ds课本放下不久,我写的应该是对的,这是简单选择排序,你的才是真正的冒泡排序