• PUDN用户
    了解作者
  • Java
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 14
    下载次数
  • 2010-06-25 10:17
    上传日期
冒泡排序 介绍冒泡排序的各个步骤 很详细的解释了整个过程
abc.rar
  • abc.java
    6.6KB
内容介绍
import java.applet.*; import java.awt.*; import java.awt.event.*; public class ch6_e6_23 extends Applet implements ActionListener { final String SORT_METHOD_NAME[] = {"冒泡排序","桶排序"}; Label prompt = new Label("请输入欲排序的字符串(最多10个):"); TextField input = new TextField(5); Button sortBubbleBtn = new Button(SORT_METHOD_NAME[0]); Button sortSelectBtn = new Button(SORT_METHOD_NAME[1]); String[] OrigArray = new String[10]; //保存排序前顺序的数组 String[] DataArray = new String[10]; //保存待排序数据的数组 int DataInputed = 0; //已输入数据的统计 String[][] SortPro = new String[11][10]; //保存排序过程的二维数组 public void init() //初始化 { for(int i=0; i<10; i++) { DataArray[i] = " "; OrigArray[i] = " "; SortPro[10][i] = " "; for(int j=0; j<10; j++) SortPro[i][j] = " "; } add(prompt); add(input); add(sortBubbleBtn); //将提示、输入区域、按钮加入Applet add(sortSelectBtn); input.setText(""); input.addActionListener(this); sortBubbleBtn.addActionListener(this); sortSelectBtn.addActionListener(this); } public void paint(Graphics g)//打印排序全过程 { for(int i=0;i<SortPro.length;i++) //二维数组的行数 for(int j=0;j<SortPro[i].length;j++) //二维数组第i行中的数据个数 { try{ g.drawString(SortPro[i][j],10+80*j,40+20*i); }catch(NullPointerException npe) { System.out.println(i + "," + j); } } } public void actionPerformed(ActionEvent e) { if(e.getSource() == input)//用户在input中输入并回车 { //记录数据 DataArray[DataInputed] = input.getText(); OrigArray[DataInputed] = DataArray[DataInputed]; DataInputed++; if(DataInputed < 10) { prompt.setText("已输入" + DataInputed + "个字符串,请继续"); input.setText(""); //准备输入下一个数据 } else //已输入10个数据 { prompt.setText("已输入10个字符串,不能再输入了"); input.setVisible(false); //隐藏其输入区域 } } if(e.getSource() == sortBubbleBtn) //用户单击按钮,启动排序过程 { for(int i=0;i<DataArray.length;i++) //记录未排序的原始数据 SortPro[0][i] = DataArray[i]; BubbleSortProcedure(); //调用冒泡排序方法 repaint(); for(int i=0;i<DataArray.length;i++) DataArray[i] = OrigArray[i]; //恢复排序前的乱序 } if(e.getSource() == sortSelectBtn) { for(int i=0;i<DataArray.length;i++) //记录未排序的原始数据 SortPro[0][i] = DataArray[i]; BucketSortProcedure(); //调用桶排序方法 repaint(); for(int i=0;i<DataArray.length;i++) DataArray[i] = OrigArray[i]; //恢复排序前的乱序 } } void BubbleSortProcedure() //冒泡排序方法 { int pass,i,exchangeCnt; String temp = ""; for(pass=0;pass<DataArray.length;pass++) //扫描多次 { exchangeCnt=0;//记录本轮两两交换的次数 for(i=0;i<DataArray.length-pass-1;i++) //一次扫描过程 { //每次扫描比较范围缩小一个 if(DataArray[i].compareToIgnoreCase(DataArray[i+1]) > 0) //一次两两比较交换过程 { temp = DataArray[i]; DataArray[i] = DataArray[i+1]; DataArray[i+1] = temp; exchangeCnt++; } } for(i=0;i<DataArray.length;i++) SortPro[pass+1][i] = DataArray[i]; //记录本轮扫描后数据排列情况 if(exchangeCnt == 0) //若一次也未交换,则说明已完全排好序,不必再循环 return; } } void BucketSortProcedure() //桶排序方法 { //暂时将字符范围限定在128个ASCII码内,最后一列保存这一行的数据个数 String bucket[][] = new String[128][DataInputed+1]; int pass =0;//扫描轮数计数 for(int i=0; i<128; i++) for(int j=0; j<DataInputed; j++) bucket[i][j] = " "; int strLength=0, doo=0; StringBuffer sb; //补足参差的字符串,使大家长度相同 for(int i=0; i<DataInputed; i++) strLength = Math.max(strLength,DataArray[i].length()); for(int i=0; i<DataInputed; i++) if(DataArray[i].length()<strLength) { sb = new StringBuffer(DataArray[i]); for(int j=0; j<strLength-DataArray[i].length(); j++) sb.append((char)doo); DataArray[i] = sb.toString(); } do { for(int i=0;i<128;i++) { bucket[i][DataInputed] = "0"; } for(int i=0;i<DataInputed;i++)//分散扫描 { int ch; if(DataArray[i].length()-1 >= pass) ch = DataArray[i].charAt(DataArray[i].length()-1-pass); else ch = 0; if(ch>=128 || ch<0) { showStatus("输入的字符超出了处理范围,只能处理ASCII字符串。"); return; } //去除大小写的影响 if(ch>='A' && ch<='Z') { System.out.println(ch + "," + (char)ch); ch += 'a' - 'A'; System.out.println(ch + "," + (char)ch); } int count = Integer.parseInt(bucket[ch][DataInputed]); bucket[ch][count++] = DataArray[i]; bucket[ch][DataInputed] = Integer.toString(count); } int k=0; for(int i=0;i<128;i++)//集中扫描 for(int j=0;j<Integer.parseInt(bucket[i][DataInputed]);j++) DataArray[k++] = bucket[i][j]; for(int i=0;i<DataArray.length;i++) //记录本轮选择后数据排列情况 SortPro[pass][i] = DataArray[i]; pass++; }while(Integer.parseInt(bucket[0][DataInputed]) != DataInputed);//一轮扫描 } }
评论
    相关推荐
    • neibupaixu.rar
      数据结构课程设计实现内部排序算法的比较问题。
    • 2016032701.rar
      排序算法,包括冒泡排序,堆排序,快排,归并排序等等
    • C语言编写的各种算法程序
      C语言程序190例.doc,C语言归并、选择、直接插入、希尔、冒泡、快速、堆排序与顺序、二分查找排序.docx,经典算法50例(绝对经典).doc,C语言算法100例.doc,C语言趣味程序设计编程百例精解.doc
    • 构建大顶堆leetcode-data-structures-and-algorithms:数据结构和算法&编码访谈&LeetCo
      冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 计数排序 基数排序 查找 有序数组的二分查找 插值查找 模糊二分查找 散列表 支持插入、删除、查找的散列表 分离链接法处理散列表中的冲突 线性探查法处理散...
    • 蛮力法实现最近对,凸包,选择排序,冒泡排序
      算法设计与分析,用蛮力法实现最近对,凸包,选择排序,改进的冒泡排序
    • leetcode数组下标大于间距-go-rookie:Golang菜鸟
      冒泡排序 func BubbleSorter(array *[]int) { fmt.Println("BubbleSorter Start ", *array) len := len(*array) for i := 0; i < len; i++ { for j := 0; j < len-i-1; j++ { if (*array)[j] > (*...
    • 大一C语言所有课程作业(包括计算器、水仙花什么的)
      软件工程专业,大一,C语言专业课,整学期所有课时作业,加上我自己平时练习的代码,包括什么C语言版计算器,计算水仙花数、冒泡排序、矩阵转置、对角线和、统计单词个数、成绩排序等等
    • compiler:C# 到 MIPS 编译器
      其中一些程序执行有用的操作,如冒泡排序、归并排序、河内塔、幂、gcd、阶乘、段树、素筛等。 语言规格 语言特点 数据类型 - int、bool、char、字符串(大小 <= 200)、数组、对象 运营商 整数 一元 -
    • 手机T9拼音输入法模仿器
      这里我处理手段使用的是以前依稀记得的冒泡排序 和list的rmove 来挨个处理 先把前面按键组成的所有拼音组合挨个拿出来退一个字符 然后把第一个和所有集合中所有的拼音组合相比 有相同的就去掉 集合中原先第2个...
    • BBS_system_on_java.rar
      BBS论坛系统由JAVA和JSP实现,开发中涉及JavaBean,JSP和服务器Tomcat5.0.7的设置,数据库用SQL2000。有注册登陆,浏览,发帖 回帖,帖子管理,论坛设置,管理版块,用户管理等模块。