自己写的三种传统排序法。快排法主要是自己也没怎么搞明白……
public void insert(int[] a3) {//插入排序法
// TODO Auto-generated method stub
Systemoutprintln("插入法");
int temper=0;
for(int i=1;i<a3length;i++){
for(int j=i;j>0;j--){
if(a3[j]<a3[j-1]){
temper=a3[j];
a3[j]=a3[j-1];
a3[j-1]=temper;
}else break;
}
}
}
//插入排序法完
//选择排序法
public void select(int[] a2) {
// TODO Auto-generated method stub
Systemoutprintln("选择排序法");
int temper=0;
for (int i = 0; i < a2length-1; i++) {
int min = a2[i];
int minFoot = i;
for (int j = i + 1; j < a2length; j++) {
if (min > a2[j]) {
min=a2[j];
minFoot=j;
}
}
temper=a2[i];
a2[i]=min;
a2[minFoot]=temper;
}
}
//选择排序法完
//冒泡排序法
public void Bubbling(int[] a1) {
Systemoutprintln("冒泡排序法");
int temper = 0;
for (int i = 0; i < a1length - 1; i++) {
for (int j = 0; j < a1length - 1 - i; j++) {
if (thisa1[j] > thisa1[j + 1]) {
temper = a1[j];
a1[j] = a1[j + 1];
a1[j + 1] = temper;
}
}
}
}
//冒泡排序法完
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
解析:
procedure sort(l,r:longint);
var i,j,x,y:longint;
begin
i:=l;
j:=r;
x:=b[(i+j) div 2];
repeat
while x>b[i] do inc(i);
while b[j]>x do dec(j);
if not (i>j) then
begin
y:=b[i];
b[i]:=b[j];
b[j]:=y;
inc(i);
dec(j);
end;
until i>j;
if i<r then sort(i,r);
if l<j then sort(l,j);
end;
这是我刚编的,这个过程是对于数组b进行快排。在主程序中sort(1,n)就可以排序了。
具体的思想嘛,我在网上找了一下,这个说得是对的:
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一躺快速排序。一躺快速排序的算法是:
1)、设置两个变量I、J,排序开始的时候I:=1,J:=N;
2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];
3)、从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;
4)、从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;
5)、重复第3、4步,直到I=J;
例如:待排序的数组A的值分别是:(初始关键数据X:=49)
A[1] A[2] A[3] A[4] A[5] A[6] A[7]:
49 38 65 97 76 13 27
进行第一次交换后: 27 38 65 97 76 13 49
( 按照算法的第三步从后面开始找
进行第二次交换后: 27 38 49 97 76 13 65
( 按照算法的第四步从前面开始找>X的值,65>49,两者交换,此时I:=3 )
进行第三次交换后: 27 38 13 97 76 49 65
( 按照算法的第五步将又一次执行算法的第三步从后开始找
进行第四次交换后: 27 38 13 49 76 97 65
( 按照算法的第四步从前面开始找大于X的值,97>49,两者交换,此时J:=4 )
此时再执行第三不的时候就发现I=J,从而结束一躺快速排序,那么经过一躺快速排序之后的结果是:27 38 13 49 76 97 65,即所以大于49的数全部在49的后面,所以小于49的数全部在49的前面。
快速排序就是递归调用此过程——在以49为中点分割这个数据序列,分别对前面一部分和后面一部分进行类似的快速排序,从而完成全部数据序列的快速排序,最后把此数据序列变成一个有序的序列,根据这种思想对于上述数组A的快速排序的全过程如图6所示:
初始状态 {49 38 65 97 76 13 27}
进行一次快速排序之后划分为 {27 38 13} 49 {76 97 65}
分别对前后两部分进行快速排序 {13} 27 {38}
结束 结束 {49 65} 76 {97}
49 {65} 结束
结束
图6 快速排序全过程
1)、设有N(假设N=10)个数,存放在S数组中;
2)、在S[1。。N]中任取一个元素作为比较基准,例如取T=S[1],起目的就是在定出T应在排序结果中的位置K,这个K的位置在:S[1。。K-1]<=S[K]<=S[K+1N],即在S[K]以前的数都小于S[K],在S[K]以后的数都大于S[K];
3)、利用分治思想(即大化小的策略)可进一步对S[1。。K-1]和S[K+1。。N]两组数据再进行快速排序直到分组对象只有一个数据为止。
如具体数据如下,那么第一躺快速排序的过程是:
数组下标: 1 2 3 4 5 6 7 8 9 10
45 36 18 53 72 30 48 93 15 36
I J
(1) 36 36 18 53 72 30 48 93 15 45
(2) 36 36 18 45 72 30 48 93 15 53
(3) 36 36 18 15 72 30 48 93 45 53
(4) 36 36 18 15 45 30 48 93 72 53
(5) 36 36 18 15 30 45 48 93 72 53
通过一躺排序将45放到应该放的位置K,这里K=6,那么再对S[1。。5]和S[6。。10]分别进行快速排序。
楼主您好!
代码如下:
Option ExplicitPrivate Sub Form_Load()
Dim Number(3) As Double
Dim i As Integer
Dim StrMsg As String
StrMsg = StrMsg & "您输入的三个数分别为:" & vbCrLf
For i = 1 To 3
Number(i) = Val(InputBox("请输入第3个数!这是第" & CStr(i) & "个数", "提示窗口"))
StrMsg = StrMsg & "第" & CStr(i) & "个数为:" & CStr(Number(i)) & vbCrLf
Next i
For i = 1 To 2
If Number(i) > Number(i + 1) Then
Max Number(i), Number(i + 1)
End If
Next i
For i = 1 To 2
If Number(i) > Number(i + 1) Then
Max Number(i), Number(i + 1)
End If
Next i
StrMsg = StrMsg & "排序后的三个数分别为:" & vbCrLf
For i = 1 To 3
StrMsg = StrMsg & "第" & CStr(i) & "个数为:" & CStr(Number(i)) & vbCrLf
Next i
StrMsg = StrMsg & "谢谢使用!" & vbCrLf & " 软件作者:百度网友1372355088"
MsgBox StrMsg, 64 + vbOKCancel + vbDefaultButton1, "排序结果"
End Sub
Private Function Max(X As Double, Y As Double) As Double
Dim Z As Double
If X > Y Then
Z = X
X = Y
Y = Z
End If
End Function
以上就是关于java程序排序全部的内容,包括:java程序排序、快速排序的PASCAL程序是什么啊最好有思想、VB三个数排序程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)