冒泡法排序_c++实现

看完了郝斌老师的c语言视频,冒泡法排序,就试着写了。我觉得学习算法最重要的不是代码,而是它的原理。

代码:

  1 /**
  2  * Copyright (c) 1991 - 2016 Arvin Tang.
  3  * All rights reserved.
  4  *
  5  * 文件名称:郝斌C语言视频教程_163_冒泡排序
  6  * 简要描述:用冒泡法排序
  7  *
  8  * 当前版本:1.0
  9  * 作    者:
 10  * 完成日期:2016-1-9
 11  * 修订说明:
 12  *
 13  * 取代版本:
 14  * 作    者:
 15  * 完成日期:
 16  * 修订说明:
 17  */
 18 # include <iostream>
 19
 20 using namespace std;
 21
 22 void up_sort(int * p, int num);//冒泡升序排序函数
 23 void down_sort(int * p, int num);//冒泡降序排序函数
 24
 25 int main(int argc, char const *argv[])
 26 {
 27     int num;
 28
 29     int i;
 30
 31     int op;//菜单选项
 32
 33     cout<<"请输入你要排序的个数:"<<endl;
 34     cin>>num;
 35
 36     //申请动态内存
 37     int * arrary = (int *)malloc(sizeof(int)*num);
 38     if(arrary == NULL)
 39     {
 40         cout<<"申请动态数组失败!"<<endl;
 41         exit(0);//exit(0)表示正常结束,exit(非0值表示错误返回)
 42     }
 43
 44     cout<<"请输入你要排序的数字:"<<endl;
 45     for(i = 0; i < num; i++)
 46     {
 47         cin>>arrary[i];
 48     }
 49
 50     cout<<"请选择排序方式对应的序号:\t1 升序(从小到大)\t2 降序(从大到小)"<<endl;
 51     cin>>op;
 52
 53     switch(op)
 54     {
 55         case 1 :
 56         up_sort(arrary,num);
 57         cout<<"升序已排完:"<<endl;
 58         break;
 59         case 2 :
 60         down_sort(arrary,num);
 61         cout<<"降序已排完:"<<endl;
 62         break;
 63         default:
 64         break;
 65     }
 66
 67     for(i = 0; i < num; i++)
 68     {
 69         cout<<arrary[i]<<"\t";
 70     }
 71
 72     cout<<"\n";
 73
 74     return 0;
 75 }
 76
 77 /**
 78  * 函数名称:冒泡法_升序排序
 79  * 输入参数:一维数组地址,数组元素个数
 80  * 输出参数:
 81  * 返 回 值:
 82  */
 83 void up_sort(int * p, int num)
 84 {
 85     int i;
 86     int j;
 87     int temp;
 88
 89     for(i = 0; i < num-1; i++)
 90     {
 91         for(j = 0; j < num-i-1; j++)
 92         {
 93             if(p[j] > p[j+1])
 94             {
 95                 temp = p[j+1];
 96                 p[j+1] = p[j];
 97                 p[j] = temp;
 98             }
 99         }
100     }
101 }
102
103 /**
104  * 函数名称:冒泡法_降序排序
105  * 输入参数:一维数组地址,数组元素个数
106  * 输出参数:
107  * 返 回 值:
108  */
109 void down_sort(int * p, int num)
110 {
111     int i;
112     int j;
113     int temp;
114
115     for(i = 0; i < num-1; i++)
116     {
117         for(j = 0; j < num-i-1; j++)
118         {
119             if(p[j] < p[j+1])
120             {
121                 temp = p[j+1];
122                 p[j+1] = p[j];
123                 p[j] = temp;
124             }
125         }
126     }
127 }

效果:

时间: 2024-10-24 00:53:18

冒泡法排序_c++实现的相关文章

8. 冒泡法排序和快速排序(基于openCV)

一.前言 主要讲述冒泡法排序和快速排序的基本流程,并给出代码实现,亲测可用. 二.冒泡法排序 冒泡法排序主要是将相邻两个值比较,把小的向前冒泡,大的向后沉淀,时间复杂度为O(n2).主要思想如下: 分为内外循环,每次外循环确定一个大的数据的具体位置,如下实例: 从图中可以看出,进过两次外循环就可以得到排序结果,随后的8次循环都浪费了,为了避免这种情况,我们可以设置一个状态参数,用来表示内循环是否发生数据的交换,从而作为外循环是否退出的信号. 三.快速排序 快速排序是最有效的排序方法之一,其主要思

数组-03. 冒泡法排序

数组-03. 冒泡法排序(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 徐镜春(浙江大学) 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一个元素必定是最大的元素.然后用同样的方法对前N-1个元素进行第二遍扫描.依此类推,最后只需处理两个元素,就完成了对N个数的排序. 本题要求对任意给定的K(<N),输出扫描完第K遍后的中间

数组-03. 冒泡法排序(20)

1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int i,j,n,k,a[100],tmp; 5 cin>>n>>k; 6 for(i=0;i<n;++i) 7 cin>>a[i]; 8 for(j=0;j<k;++j) 9 for(i=0;i<n-j-1;++i) //注意-1 10 if(a[i]>a[i+1]){ 11 tmp=a[i]; 12 a[i]=

选择法和冒泡法排序接口

#define ret_ok 0 #define ret_err 1 #define ARRAY_SIZE 10 /*选择法排序*/ int Choice_Sort(int array[],int array_len) { int i = 0; int j = 0; int iMin = 0; int iTemp = 0; int iFlag = 0; for(i=0;i<array_len-1;i++) { iMin = i; for(j=i+1;j<array_len;j++) { if(

C语言实现冒泡法排序

首先我们看冒泡法排序的原理,假设有一个包含6个数字的数组其思路为:每次将相邻两个数比较,将小的调到前面,如果有6个数:8,7,5,4,2,0.第一次先将最前面的两个数8和7对调(看下图).第二次将第二个数和第三个数(8和5)对调.....如此总计进行了5次,得到7-5-4-2-0-8的顺序,可以看到:最大的数8已经沉底,成为最下面的一个数,而小的数上升.经过第一轮(5次比较)后,得到了最大的数9.   然后进行第二轮的比较(见下图),对余下的7,5,4,2,0进行新一轮的比较,以便使次大的数沉底

C#冒泡法排序源码

如下内容内容是关于C#冒泡法排序的内容,应该对码农有一些用途. int[] myArray = new int[] { 10, 8, 3, 5, 6, 7, 4, 6, 9 }; for( int j=1;j<myArray.Length;j ++ ) { for(int i=0;i<myArray.Length - 1;i ++) { if( myArray[i]>myArray[i+1]) { int temp = myArray[i]; myArray[i] = myArray[i

php 冒泡法 排序

1 <?php 2 /** 3 * php 冒泡法 4 * @param $arr 5 * @param string $order 排序符 6 * @return $arr 7 */ 8 function orderarr(&$arr, $order = 'asc') 9 { 10 if (!$arr) return false; 11 $len = count($arr); 12 for ($i = 0; $i < $len; $i++) { 13 for ($j = 1; $j

一个循环实现冒泡法排序(并没有什么卵用)

冒泡法时间复杂度为O(n^2) 这个是改不了的 不可能因为用一个循环实现,就变成了O(N)... 所以,并没有什么卵用,只是一种写代码的方式而已... //Swap 用宏实现 #define Swap(a,b,c) ((c)=(a),(a)=(b),(b)=(c)) //第一种方式,,,最简单的 void BubbleSortOneLoop(int ar[], int n) { int i = 0; int l = 0; while (i < n - 1)//i还是控制最外层 { if (ar[

冒泡法排序参考(Java)

package com.swift; public class Maopao { //冒泡法 public static void main(String[] args) { int[] arr= {28,2,38,1,390,17,10,9,323}; for(int i=0;i<10;i++) { for(int j=0;j<arr.length-1-i;j++) { if(arr[j]>arr[j+1]) { int temp; temp=arr[j]; arr[j]=arr[j+