冒泡排序大比拼---看看谁的算法最简单
首先声明:此贴的目的是为了提高大家的学习兴趣。希望各位把自己写的冒泡排序方法贴上来。看谁的算法最经典。首先抛砖引玉献丑了
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
[解决办法]
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(); }
[解决办法]
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的意思,冒泡排序还能写出很多很多版本来吗~~
就算是冒泡排序写出来有点儿区别,它的时间复杂度也应该是一样的,对于系统而言基本上没有什么影响。
我倒是觉得应该问谁的排序算法最经典,可以从时间复杂度,空间复杂度还有代码的精炼程度上比较一下 :)
[解决办法]
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);
[解决办法]
再来一个:
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]+""); }
[解决办法]
我也纳闷了,冒泡法还有 不同的泡吗?
[解决办法]
[解决办法]
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;
}
}
}
就这一个了.
[解决办法]
[解决办法]
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;
}
[解决办法]
}
当然这并不是最好的,如果给出的一个序列本身就是基本有序,用上面的方法会有很多没有必要的比较
所以在内循环中加上一个变量用来判断数据是否进行了交换 如果数据没有进行交换 那么说明序列已经排好了
不需要继续下面的外循环了
修改如下:
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}
}
[解决办法]
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");
[解决办法]
}
}
[解决办法]