java程序排序

java程序排序,第1张

自己写的三种传统排序法。快排法主要是自己也没怎么搞明白……

(你可以建数组来存数据,就不写完整的了。)

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 Explicit

Private 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三个数排序程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9470618.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存