首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

冒泡排序大比拼-看看哪位高手的算法最简单

2012-01-29 
冒泡排序大比拼---看看谁的算法最简单首先声明:此贴的目的是为了提高大家的学习兴趣。希望各位把自己写的冒

冒泡排序大比拼---看看谁的算法最简单
首先声明:此贴的目的是为了提高大家的学习兴趣。希望各位把自己写的冒泡排序方法贴上来。看谁的算法最经典。首先抛砖引玉献丑了
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication3 

  class Program 
  { 
  static void Main(string[] args) 
  { 

  int[] a = { 3, 4, 7, 10, 5, 9 }; 
  int[] b = BubbleSort(a); 
  for (int i = 0; i < b.Length; i++) 
  { 
  Console.Write(b[i].ToString() + " "); 

  } 
  Console.ReadLine(); 
  } 

  public static int[] BubbleSort(int[] list) 
  { 
  int i, temp; 
  for (int j = 0; j < list.Length; j++) 
  { 
  for (i = list.Length - 1; i > j; i--) 
  { 
  if (list[j] < list[i]) 
  { 
  temp = list[j]; 
  list[j] = list[i]; 
  list[i] = temp; 
  } 
  } 
  } 

  return list; 
  } 
  } 



[解决办法]
算法都定了,
for (int j = 0; j < list.Length; j++) 

for (i = list.Length - 1; i > j; i--) 

if (list[j] < list[i]) 

temp = list[j]; 
list[j] = list[i]; 
list[i] = temp; 


这个是最经典的



[解决办法]
顶二楼
[解决办法]
=NR
[解决办法]

探讨
顶者都有分哦

[解决办法]

[解决办法]
最简单?必然是使用.net framework的类库最简单了:
C# code
        static void Main(string[] args)        {            int[] a = { 3, 4, 7, 10, 5, 9 };            Array.Sort(a);            for (int i = 0; i < b.Length; i++)            {                Console.Write(b[i].ToString() + " ");            }            Console.ReadLine();        }
[解决办法]
探讨
算法都定了, 
for (int j = 0; j < list.Length; j++) 

for (i = list.Length - 1; i > j; i--) 

if (list[j] < list[i]) 

temp = list[j]; 
list[j] = list[i]; 
list[i] = temp; 


这个是最经…

------解决方案--------------------


C# code
int t;bool b=false;for(int i=0;i<100 && !b;i++){    b=true;    for(int j=i+1;j<100;j++)    {        if(a[j]<a[i])        {            t=a[i];            a[i]=a[j];            a[j]=t;            b=false;        }    }}
[解决办法]
有点儿不太明白LZ的意思,冒泡排序还能写出很多很多版本来吗~~
就算是冒泡排序写出来有点儿区别,它的时间复杂度也应该是一样的,对于系统而言基本上没有什么影响。
我倒是觉得应该问谁的排序算法最经典,可以从时间复杂度,空间复杂度还有代码的精炼程度上比较一下 :)
[解决办法]
C# code
            int[] a = { 3, 4, 7, 10, 5, 9 };            var t = from x in a orderby x select x;            foreach (int i in t)                Console.WriteLine(i);
[解决办法]
再来一个:
C# code
 int[] list = new int[] { 100, 250, 110, 320, 120, 350, 550, 770, 660 };            for (int i = 0; i < list.Length; i++)            {                for (int j = i + 1; j < list.Length; j++)                {                    if (list[i] > list[j])                    {                        int temp = list[i];                        list[i] = list[j];                        list[j] = temp;                    }                }            }            for (int i = 0; i < list.Length; i++)            {                Console.WriteLine(list[i]+"");            }
[解决办法]
我也纳闷了,冒泡法还有 不同的泡吗?
[解决办法]
探讨
最简单?必然是使用.net framework的类库最简单了: 

C# code
static void Main(string[] args)
{

int[] a = { 3, 4, 7, 10, 5, 9 };
Array.Sort(a);
for (int i = 0; i < b.Length; i++)
{
Console.Write(b[i].ToString() + " ");

}
Console.ReadLine();


[解决办法]
n-i-1


 int Temp = 0; 
int[] arr = { 1, 5, 3, 6, 4, 6, 8, 3, 2, 7, 1 }; 
for (int i = 0; i < arr.Length; i++) 

for (int j = 0; j < arr.Length - i - 1; j++) 

if (arr[j] > arr[j + 1]) 

Temp = arr[j]; 
arr[j] = arr[j + 1]; 
arr[j + 1] = Temp; 



for (int i = 0; i < arr.Length; i++) 

Console.WriteLine(arr); 


Console.ReadLine();
[解决办法]
冒泡

  都着不多
[解决办法]
for (int increment = a.length / 2; increment > 0; increment /= 2)
{
//每个组内排序
 for (int i = increment; i < a.length; i++)
 {
temp = a[i];
for (j = i; j >= increment; j -= increment)
{
if (temp < a[j - increment])
{
a[j] = a[j - increment];
}
else
{
break;
}
}
a[j] = temp;
}
}
我这个是稀尔排序
   不是冒泡
  仅供参考
    呵呵

[解决办法]
学习了。


[解决办法]

探讨
算法都定了, 
for (int j = 0; j < list.Length; j++) 

for (i = list.Length - 1; i > j; i--) 

if (list[j] < list[i]) 

temp = list[j]; 
list[j] = list[i]; 
list[i] = temp; 


这个是最经…

[解决办法]
限制成用冒泡的话只有这一个算法
for (int j = 0; j < list.Length; j++) 

for (i = list.Length - 1; i > j; i--) 

if (list[j] < list[i]) 

temp = list[j]; 
list[j] = list[i]; 
list[i] = temp; 



[解决办法]
再精简无非是中间变量都不要了

C# code
            for (int j = 0; j < list.Length; j++)             {                 for (i = list.Length - 1; i > j; i--)                 {                     if (list[j] < list[i])         // list[i]=10 list[j]=9                    {                         list[i] += list[j];        // list[i]=19 list[j]=9                        list[j] = list[i]-list[j]; // list[i]=19 list[j]=10                        list[i] -= list[j];        // list[i]=9  list[j]=10                    }                 }
[解决办法]
for (int j = 0; j < list.Length; j++) 

for (i = list.Length - 1; i > j; i--) 

if (list[j] < list[i]) 

temp = list[j]; 
list[j] = list[i]; 
list[i] = temp; 



就这一个了.
[解决办法]
探讨
最简单?必然是使用.net framework的类库最简单了: 

C# code
static void Main(string[] args)
{

int[] a = { 3, 4, 7, 10, 5, 9 };
Array.Sort(a);
for (int i = 0; i < b.Length; i++)
{
Console.Write(b[i].ToString() + " ");

}
Console.ReadLine();


[解决办法]
放到多核的电脑上快。。。
[解决办法]
void bsTest(int r[])
{
int no =r.length;
int bound = no-1;
while(bound!=0)
{
no = 0;
for(int i = 0 ;i<bound;i++)
{
if(r[i]>r[i+1])
{
int temp = r[i];
r[i]=r[i+1];
r[i+1]=temp;
no =i;
}
}
bound = no;
}
}


public static void main(String [] main)
{
int[] m = {2,6,7,4,0,1};
bubblesort bs = new bubblesort();
bs.bsTest(m);
for(int i = 0 ;i<m.length;i++){
System.out.println(m[i]); 
}

}
 



[解决办法]
enum SortType
{
ASC,
DESC 
}

class BubbleSort
{
private SortType order;
private int[] list;
private int iterateCount;
public SortType Order
{
get { return order; }
set { order = value; }
}
public int[] List
{
get { return list; }
set { list = value; }
}
public int IterateCount
{
get { return iterateCount; }
}
public BubbleSort()
{
order = SortType.ASC;
}
public BubbleSort(int[] arr)
{
list = arr;
order = SortType.ASC;
}
public BubbleSort(int[] arr, SortType type)
{
list = arr;
order = type;
}
private void Swap(ref int a, ref int b)
{
int c = a;
a = b;
b = c;
}
public void Sort()
{
bool isOK = false;
iterateCount = 0;
while (!isOK)
{
isOK = true;
for (int i = 0; i < list.Length - 1; i++)
{
iterateCount++;
switch (order)
{
case SortType.ASC:
{
if (list[i] > list[i + 1])
{
Swap(ref list[i], ref list[i + 1]);
isOK = false;
}
break;
}
case SortType.DESC:
{
if (list[i] < list[i + 1])
{
Swap(ref list[i], ref list[i + 1]);
isOK = false;
}
break;
}
}
}
}
}
public string GetDataString()
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.Length; i++)
sb.Append(list[i]);
return sb.ToString();
}
public string GetDataString(string separator)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.Length; i++)
{
sb.Append(list[i]);
sb.Append(separator);
}
sb.Remove(sb.Length - separator.Length, separator.Length);
return sb.ToString();
}
}

[解决办法]
for(int i=0;i<list.length;i++){
for(int j=list.length-1;j<i;j--){
if(list[j]<list[i]){
temp=list[j];
list[j]=list[i];
list[i]=temp;
}
}
}
就是二楼的这个 NB
[解决办法]
public void bubbleSort(int a[])
{
for (int pass = 0; pass < a.length; pass++) {
for (int element = 0; element < a.length-1; element++) {
if (a[element]>a[element+1]) {
swap(a,element,element+1);
}

}

}
}
public void swap(int a[],int first,int second)


{
int hold;

hold=a[first];
a[first]=a[second];
a[second]=hold;
}
[解决办法]

探讨
最简单?必然是使用.net framework的类库最简单了: 

C# code
static void Main(string[] args)
{

int[] a = { 3, 4, 7, 10, 5, 9 };
Array.Sort(a);
for (int i = 0; i < b.Length; i++)
{
Console.Write(b[i].ToString() + " ");

}
Console.ReadLine();


[解决办法]
[color=#993300][/color]
探讨
引用:
最简单?必然是使用.net framework的类库最简单了: 

C# code 
static void Main(string[] args) 


int[] a = { 3, 4, 7, 10, 5, 9 }; 
Array.Sort(a); 
for (int i = 0; i < b.Length; i++) 

Console.Write(b[i].ToString() + " "); 


Console.ReadLine(); 


[解决办法]
探讨
算法都定了,
for (int j = 0; j < list.Length; j++)
{
for (i = list.Length - 1; i > j; i--)
{
if (list[j] < list[i])
{
temp = list[j];
list[j] = list[i];
list[i] = temp;
}
}
这个是最经典的




[解决办法]
void bubbleSort(int[] array, int n)
{
//change决定有没有必要进行下一趟排序
//1:有必要,0:没有必要
int i, j, change, temp;
change = 1;
j = 1;
while (change == 1)
{
change = 0;
for (i = 0; i < n - j; i++)
{
if (array[i] > array[i + 1])
{
temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
change = 1;
}
}
j++;
}
}
仅共大家参考!
[解决办法]
探讨
最简单?必然是使用.net framework的类库最简单了: 

C# code
static void Main(string[] args)
{

int[] a = { 3, 4, 7, 10, 5, 9 };
Array.Sort(a);
for (int i = 0; i < b.Length; i++)
{
Console.Write(b[i].ToString() + " ");

}
Console.ReadLine();


[解决办法]
算法上面写了很多了 就不写了 只是说一下 
冒泡排序最简单就是做两个嵌套循环 然后得到排好的算法
如LZ:
 public static int[] BubbleSort(int[] list) 

int i, temp; 
for (int j = 0; j < list.Length; j++) 

for (i = list.Length - 1; i > j; i--) 

if (list[j] < list[i]) 

temp = list[j]; 
list[j] = list[i]; 
list[i] = temp; 




return list; 



当然这并不是最好的,如果给出的一个序列本身就是基本有序,用上面的方法会有很多没有必要的比较
所以在内循环中加上一个变量用来判断数据是否进行了交换 如果数据没有进行交换 那么说明序列已经排好了
不需要继续下面的外循环了
修改如下:
public static int[] BubbleSort(int[] list) 

bool a = false;
int i, temp; 
for (int j = 0; j < list.Length; j++) 


for (i = list.Length - 1; i > j; i--) 


if (list[j] < list[i]) 

temp = list[j]; 
list[j] = list[i]; 
list[i] = temp; 
a=true;




if(a){a=false}
else {return list} 


[解决办法]

探讨
引用:
算法都定了, 
for (int j = 0; j < list.Length; j++) 

for (i = list.Length - 1; i > j; i--) 

if (list[j] < list[i]) 

temp = list[j]; 
list[j] = list[i]; 
list[i] = temp; 



[解决办法]
C# code
int[] list = { 2, 5, 1, 9, 3, 6, 2, 8, 5, 6, 0, 8, 1 };int len = list.Length;for (int i = 0; i < len - 1; ++i){    bool swap = false;    for (int j = 0; j < len - 1 - i; ++j)    {        if (list[j] > list[j + 1])        {            list[j + 1] ^= list[j];            list[j] ^= list[j + 1];            list[j + 1] ^= list[j];            swap = true;        }                        }    if (!swap)        break;}for (int i = 0; i != list.Length; ++i)    Console.Write("{0, -5}", list[i]);Console.Write("\n");
[解决办法]
探讨
算法都定了, 
for (int j = 0; j < list.Length; j++) 

for (i = list.Length - 1; i > j; i--) 

if (list[j] < list[i]) 

temp = list[j]; 
list[j] = list[i]; 
list[i] = temp; 


这个是最经…

[解决办法]
就是考虑到原始数组就是有序的加的优化,
void BubbleSort(SeqList R)
{ int i,j;
bool exchange; //交换标志
for(i=1;i<n;i++){ //最多做n-1趟排序
exchange=FALSE; //本趟排序开始前,交换标志应为假
for(j=n-1;j>=i;j--) //对当前无序区R[i..n]自下向上扫描
if(R[j+1].key<R[j].key){//交换记录
R[0]=R[j+1]; //R[0]不是哨兵,仅做暂存单元
R[j+1]=R[j];
R[j]=R[0];
exchange=TRUE; //发生了交换,故将交换标志置为真
}
if(!exchange) //本趟排序未发生交换,提前终止算法
return;
} //endfor(外循环)
} //BubbleSort 

就是这个.可以没有哨兵

[解决办法]
function bubblesort (A : list[1..n]) 
{
var int i, j;
for i from n downto 1 
{
for j from 1 to i-1 

if (A[j] > A[j+1])
swap(A[j], A[j+1])
}


}
}
[解决办法]

探讨
再精简无非是中间变量都不要了 


C# code
for (int j = 0; j < list.Length; j++) 

for (i = list.Length - 1; i > j; i--) 

if (list[j] < list[i]) // list[i]=10 list[j]=9

list[i] += list[j]; // list[i]=19 list[j]=9
list[j] = …

[解决办法]
[code=C/C++][/code]
template <class T>
void bubbleSort(T data[],int n)
{
for(int i=0; i<n-1; i++)
for(int j=n-1; j>i;--j)
if(data[j] < data[j-1])
swap(data[j],data[j-1]);
}
[解决办法]
探讨
算法都定了, 
for (int j = 0; j < list.Length; j++) 

for (i = list.Length - 1; i > j; i--) 

if (list[j] < list[i]) 

temp = list[j]; 
list[j] = list[i]; 
list[i] = temp; 


这个是最经…

热点排行