62,614
社区成员
发帖
与我相关
我的任务
分享
int high = table.length;
int left = 1;
int right = high - 1;
int t = 0;
do {
//正向部分
for (int i = right; i >= left; i--)
{
if (table[i] < table[i - 1])
{
int temp = table[i];
table[i] = table[i - 1];
table[i - 1] = temp;
t = i;
}
}
left = t + 1;
//反向部分
for (int i = left; i < right + 1; i++)
{
if (table[i] < table[i - 1])
{
int temp = table[i];
table[i] = table[i - 1];
table[i - 1] = temp;
t = i;
}
}
right = t - 1;
} while (left <= right);
public class DoubleBubbleSort {
public static void main(String[] args) {
int[] a = {6, 8, 9, 3, 4, 7, 5, 2, 0, 1};
// 排序前
for (int i : a) {
System.out.print(i + " ");
}
System.out.println();
Sort(a);
// 排序后
for (int i : a) {
System.out.print(i + " ");
}
}
public static int[] Sort(int[] table) {
int high = table.length;
int left = 1;
int right = high - 1;
int t = 0;
do {
// 从右向左
for (int i = right; i >= left; i--)
{
if (table[i] < table[i - 1])
{
int temp = table[i];
table[i] = table[i - 1];
table[i - 1] = temp;
t = i;
}
}
left = t + 1;
// 从左向右
for (int i = left; i < right + 1; i++)
{
if (table[i] < table[i - 1])
{
int temp = table[i];
table[i] = table[i - 1];
table[i - 1] = temp;
t = i;
}
}
right = t - 1;
} while (left <= right);
return table;
}
}
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<title></title>
<%@ include file="meta.jsp"%>
<%@ include file="css.jsp"%>
<style>
.container {
width:100px;
height:100%;
margin-top:100px;
}
</style>
</head>
<body>
asdfasfas
</body>
</html>
package array;
/*
* 冒泡排序,是个嵌套循环,每次按照特定的要求比较数组中相邻的两个元素,满足要求就交换元素,一次遍历能够确定一个元素
* 双向冒泡,是一个循环内嵌套两个循环,循环一找最小,循环二找最大
*
*/
public class T {
public static void main(String[] args) {
int[] table = new int[10];
for(int i = 0;i < table.length;i++){
int x = (int)(Math.random()*200);
table[i] = x;
}
System.out.print("[");
for(int i = 0;i < table.length;i++){
System.out.print(table[i] + "\t");
}
System.out.print("]");
System.out.println();
System.out.println("=============");
int left = 0;//左边界下标
int right = table.length - 1;//右边界下标
while (table.length > 1 && right - left >= 1){//当数组里的元素多余1个 ,且边界内至少有2个元素时循环
//正向部分,内循环一,遍历一次找到最小的元素,
for (int i = right; i > left; i--) //应为每次要比较2个元素,比较到倒数第二个元素后就不用比较了
{ //每次循环的次数是当前比较元素的总数 -1
if (table[i] < table[i - 1])
{
int temp = table[i];
table[i] = table[i - 1];
table[i - 1] = temp;
}
}
System.out.print("[");
for(int i = 0;i < table.length;i++){
System.out.print(table[i] + "\t");
}
System.out.print("]");
System.out.println();
//table[left]为最小
left++;//左边界右移1位
//反向部分,内循环二,遍历一次找到最大的元素
if(table.length > 2 && left != right){//如果数组只有2个元素,或者当次外循环right-left=1时,循环二不必运行
for (int i = left; i < right ; i++)
{
if (table[i] > table[i + 1])
{
int temp = table[i];
table[i] = table[i + 1];
table[i + 1] = temp;
}
}
System.out.print("[");
for(int i = 0;i < table.length;i++){
System.out.print(table[i] + "\t");
}
System.out.print("]");
System.out.println();
//table[right]为最大
right--;//右边界左移1位
}
}
}
}