冒泡

冒泡排序代码  

C


   1 #include <stdio.h>
  2
  3 void bubblesort(int v[], int n);
  4
  5 void bubblesort(int v[], int n){
  6 int i, j, t;
  7 for(i = 0;i < n;i++){
  8 j = n - i - 1;
  9 while(j--){
  10 if(v[j] < v[j-1]){
  11 t = v[j-1];
  12 v[j-1] = v[j];
  13 v[j] = t;
  14 }
  15 }
  16 }
  17 }
  18
  19 int main(){
  20 int arr[] = {1,3,5,2,4,7,6,8,9}, len = 9;
  21
  22 bubblesort(arr, len);
  23
  24 while(len--){
  25 printf("%d - %d/n", len, arr[len]);
  26 }
  27
  28 return 0;
  29 }
  

C++


  #include <iostream>
  #define LEN 9
  using namespace std;
  int main(){
  int nArray[LEN];
  for(int i=0;i<LEN;i++)nArray[i]=LEN-i;
  cout<<"原始数据为:"<<endl;
  for(int i=0;i<LEN;i++)cout<<nArray[i]<<" ";
  cout<<endl;
  //开始冒泡
  {
  int temp;
  for(int i=LEN-1;i>0;i--)
  for(int j=0;j<i;j++){
  if(nArray[j]>nArray[j+1]){
  temp=nArray[j];
  nArray[j]=nArray[j+1];
  nArray[j+1]=temp;
  }
  }
  }
  //结束冒泡
  cout<<"排序结果:"<<endl;
  for(int i=0;i<LEN;i++)cout<<nArray[i]<<" ";
  return 0;
  }
  

PHP


  
  <?php
  //冒泡排序(一维数组)
  function bubble_sort($array)
  {
  $count = count($array);
  if ($count <= 0) return false;
  for($i=0; $i<$count; $i++)
  {
  for($j=$count-1; $j>$i; $j--)
  {
  if ($array[$j] < $array[$j-1])
  {
  $tmp = $array[$j];
  $array[$j] = $array[$j-1];
  $array[$j-1] = $tmp;
  }
  }
  }
  return $array;
  }
  //使用实例
  $_array = array('5', '8' ,'5' ,'6' ,'9' ,'3' ,'2' ,'4');
  $_array = bubble_sort($_array);
  print ($_array);
  ?>
  

Ruby


  
  def bubble(arr)
  (arr.length-1).downto(1) do |j|
  a1 = arr.dup
  j.times do |i|
  if arr > arr[i+1]
  arr,arr[i+1] = arr[i+1],arr
  end
  end
  break if a1 == arr
  end
  arr
  end
  

Java


  
  static void BubbleSort(int a []){
  int temp=0;
  for (int i = 0; i < a.length ; i++) {
  for (int j = 0; j < a.length - i - 1; j++){
  if (a[j]>a[j + 1]){ //把这里改成大于,就是升序了
  temp=a[j];
  a[j]=a[j + 1];
  a[j + 1]=temp;
  }
  }
  }
  }
  

Visual Basic


  

  Option Explicit
  Private Sub Form_click()
  Dim a, c As Variant
  Dim i As Integer, temp As Integer, w As Integer
  a = Array(12, 45, 17, 80, 50)
  For i = 0 To UBound(a) - 1
  If (a(i) > a(i + 1)) Then '若是递减,改为a(i)<a(i+1)
  temp = a(i)
  a(i) = a(i + 1)
  a(i + 1) = temp
  End If
  Next
  For Each c In a
  Print c;
  Next
  End Sub
  

Pascal


  
  <i id="bks_9tjbxut2">program bubblesort;
  const
  N=20;
  MAX=10;
  var
  a:array[1..N] of 1..MAX;
  temp,i,j:integer;
  begin
  randomize;
  for i:=1 to N do a:=1+random(MAX);
  writeln('Array before sorted:');
  for i:=1 to N do write(a,' ');
  writeln;
  for i:=N-1 downto 1 do
  for j:=1 to i do
  if a[j]<a[j+1] then
  begin
  temp:=a[j];
  a[j]:=a[j+1];
  a[j+1]:=temp
  end;
  writeln('Array sorted:');
  for i:=1 to N do write(a,' ');
  writeln;
  writeln('End sorted.');
  readln;
  end.
  

C#


  
  public void BubbleSort(int[] array) {
  int length = array.Length;
  for (int i = 0; i <= length - 2; i++) {
  for (int j = length - 1; j >= 1; j--) {
  if (array[j] < array[j - 1] ) {
  int temp = array[j];
  array[j] = array[j - 1];
  array[j - 1] = temp;
  }
  }
  }
  }
  

Python


  
  #BubbleSort used python3.1 or python 2.x
  def bubble(str):
  tmplist = list(str)
  count = len(tmplist)
  for i in range(0,count-1):
  for j in range(0,count-1):
  if tmplist[j] > tmplist[j+1]:
  tmplist[j],tmplist[j+1] = tmplist[j+1],tmplist[j]
  return tmplist
  #useage:
  str = "zbac"
  print(bubble(str)) # ['a', 'b', 'c', 'z']
  number=[16,134,15,1]
  print(bubble(number)) # [1, 15, 16, 134]
  

JS


  
  <script language="javascript">
  var DataOne=new Array(5,6,7,8,3,1,2,-1,100)
  var len=DataOne.length
  for(var i=0;i<len;i++)
  {
  for(var j=0;j<len;j++)
  {
  One=DataOne[j]
  Two=DataOne[j+1]
  if(One<Two)
  {
  DataOne[j]=Two
  DataOne[j+1]=One
  }
  }
  }
  var str=""
  for(var n=0;n<len;n++)
  {
  str+=DataOne[n]+","
  }
  alert(str)
  </script>

冒泡排序法的改进

  比如用冒泡排序将4、5、7、1、2、3这6个数排序。在该列中,第二趟排序结束后,数组已排好序,但计算机此时并不知道已经反排好序,计算机还需要进行一趟比较,如果这一趟比较,未发生任何数据交换,则知道已排序好,可以不再进行比较了。因而第三趟比较还需要进行,但第四、五趟比较则是不必要的。为此,我们可以考虑程序的优化。
  为了 标志在比较中是否进行了,设一个布尔量flag。在进行每趟比较前将flag置成true。如果在比较中发生了数据交换,则将flag置为false,在一趟比较结束后,再判断flag,如果它仍为true(表明在该趟比较中未发生一次数据交换)则结束排序,否则进行下一趟比较。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值