
正文
java排序动画演示代码 java排序算法代码实现
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
求用java写的冒泡排序,要求有图形界面,能显示每一步排序的过程,越详细越好
import java.awt.FlowLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;import javax.swing.JFrame;
public class Test9 extends JFrame{
private JButton btn = new JButton("排序");
private static TextArea ta = new TextArea(12,70);
private int[] arr = {2,1,6,88,12,99,12,33,99,88,100,22,-7};;
public Test9() {
setSize(550, 300);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
setLayout(new FlowLayout());
add(btn);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
bubbleSort(arr);
}
});
add(ta);
}
/**
* @param args
*/
public static void main(String[] args) {
new Test9();
}
public static int[] bubbleSort(int[] source) { boolean isSort = false; // 是否排序
for (int i = 1; i source.length; i++) {
isSort = false; // 在每次排序前都初始化为false
ta.append("---------------第"+i+"次排序【"+arrayToString(source)+"】---------------\n");
for (int j = 0; j source.length - i; j++) {
if (source[j] source[j + 1]) {
int temp = source[j];
source[j] = source[j + 1];
source[j + 1] = temp;
isSort = true; // 为TRUE表明此次循环(外层循环)有排序。
ta.append("第" + i + "次排序,第" + (j+1) + "次比较。" + source[j] + "与" + source[j+1] + "交换位置【"+arrayToString(source)+"】\n");
}
}
if (!isSort) {
ta.append("排序完毕!\n");
break; // 如果没有排序,说明数据已经排序完毕。
}
}
return source;
}
public static String arrayToString(int[] arr) {
if (arr == null || arr.length == 0) {
return "";
}
StringBuilder sbr = new StringBuilder();
for (int i=0;iarr.length;i++) {
sbr.append(arr[i]);
if (i != arr.length - 1) {
sbr.append(",");
}
}
return sbr.toString();
}
}
相关问答
Q1: java实现排序过程演示程序
insertion sort, heap sort and quick sort.. 我都写过java排序动画演示代码,不过是C++版本哦,演示程序...模拟器吧java排序动画演示代码? 自己写吧...又不难...是在不行自己去网上看看数据结构。 学程序抄代码永远学不会,理解java排序动画演示代码了才记得住~
这样说吧。 insertion sort 也就是最笨的排序方法? 为什么呢?要插入就要把位置空出来,比如你插到第2个位置,你的array size 是10000, 就学要把后面9998个数据都往后挪一位,费时间,费内存
heap sort..把array 构建成 heap 的结构,这里你需要理解什么是 heap? 什么是 binary tree 2进制树, binary search tree.
quick sort. 大家用得最多的方法,但是worst case 可以达到O(n2)..
quick sort, 每次选择一个privot 然后由头到尾,同时由尾到头同时和选取的中间数比较,小的放前,大的放后。然后重复这个过程,也就是partation,直到每一部分都只有一个数,就排序好了。
经验告诉我们heapsort worst case O(nlongn) 比quick sort快,但是你也可以尝试random pivot version for quick.
之后你要想? 这些排序方法能排序link list么? 对于链表什么算法最快?
Array 是random index access
link list 只能靠指针一个一个挪
Array 搜索快..直接靠index 访问数据 O(1) 时间
Link list 插入和删除数据快 O(1) 时间
总之,不不想直接回答你的问题,或者帮你写个程序,因为这对你一点用都没有。你混过今天,混不过明天。 如果真的喜欢计算机,程序。 好好读读数据结构,算法设计, 正册表达式,等等..吃透...祝你好运。
Q2: java快速排序简单代码
.example-btn{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.example-btn:hover{color:#fff;background-color:#47a447;border-color:#398439}.example-btn:active{background-image:none}div.example{width:98%;color:#000;background-color:#f6f4f0;background-color:#d0e69c;background-color:#dcecb5;background-color:#e5eecc;margin:0 0 5px 0;padding:5px;border:1px solid #d4d4d4;background-image:-webkit-linear-gradient(#fff,#e5eecc 100px);background-image:linear-gradient(#fff,#e5eecc 100px)}div.example_code{line-height:1.4em;width:98%;background-color:#fff;padding:5px;border:1px solid #d4d4d4;font-size:110%;font-family:Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;word-break:break-all;word-wrap:break-word}div.example_result{background-color:#fff;padding:4px;border:1px solid #d4d4d4;width:98%}div.code{width:98%;border:1px solid #d4d4d4;background-color:#f6f4f0;color:#444;padding:5px;margin:0}div.code div{font-size:110%}div.code div,div.code p,div.example_code p{font-family:"courier new"}pre{margin:15px auto;font:12px/20px Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;border:1px solid #ddd;border-left-width:4px;padding:10px 15px} 排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。以下是快速排序算法:
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。
快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。
快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。
快速排序的名字起的是简单粗暴,因为一听到这个名字java排序动画演示代码你就知道它存在的意义,就是快,而且效率高java排序动画演示代码!它是处理大数据最快的排序算法之一了。虽然 Worst Case 的时间复杂度达到了 O(n?),但是人家就是优秀,在大多数情况下都比平均时间复杂度为 O(n logn) 的排序算法表现要更好,可是这是为什么呢,java排序动画演示代码我也不知道。好在我的强迫症又犯了,查了 N 多资料终于在《算法艺术与信息学竞赛》上找到了满意的答案:
快速排序的最坏运行情况是 O(n?),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。
1. 算法步骤
从数列中挑出一个元素,称为 "基准"(pivot);
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;
2. 动图演示
代码实现 JavaScript 实例 function quickSort ( arr , left , right ) {
var len = arr. length ,
partitionIndex ,
left = typeof left != 'number' ? 0 : left ,
right = typeof right != 'number' ? len - 1 : right ;
if ( left
Q3: java冒泡排序法代码
冒泡排序是比较经典的排序算法。代码如下:
for(int i=1;iarr.length;i++){
for(int j=1;jarr.length-i;j++){
//交换位置
}
拓展资料:
原理:比较两个相邻的元素,将值大的元素交换至右端。
思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。
第一趟比较完成后,最后一个数一定是数组中最大的一个数,所以第二趟比较的时候最后一个数不参与比较java排序动画演示代码;
第二趟比较完成后,倒数第二个数也一定是数组中第二大的数,所以第三趟比较的时候最后两个数不参与比较java排序动画演示代码;
依次类推,每一趟比较次数-1;
??
举例说明:要排序数组:int[] arr={6,3,8,2,9,1};
for(int i=1;iarr.length;i++){
for(int j=1;jarr.length-i;j++){
//交换位置
}
参考资料:冒泡排序原理
关于java排序动画演示代码和java排序算法代码实现的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







