排序算法学习

2023-05-16

  1. ===冒泡排序===

JAVA语言实现

/**
  * 学习冒泡排序
  * 冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,
  * 一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,
  * 也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
  * 
  * 冒泡排序算法的运作如下:
  * 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  * 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  * 3. 针对所有的元素重复以上的步骤,除了最后一个。
  * 4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
  * 
  * 使用冒泡排序为一列数字进行排序的过程
  * 分类			排序算法
  * 数据结构		数组
  * 最差时间复杂度	O(n^2)
  * 最优时间复杂度	O(n)
  * 平均时间复杂度	O(n^2)
  * 最差空间复杂度	总共O(n),需要辅助空间O(1)
  * 最佳算法		No
  * @author Administrator
  * 
  */
public class Demos {
	
	/** 
	 * 自己编写的糟糕的冒泡排序算法
	 */
	protected void bubbleSort(int[] digits) {
		long time1 = new Date().getTime();
		int temp =0;
		for(int j=0;j<digits.length-1;j++){// 要排序的轮数,数字个数减一(n-1)
			for(int i=0;i<digits.length;i++){// 每一轮排序
				if(i != digits.length -1 && digits[i] > digits[i+1]){// 第一个条件是为了防止arrayOutofIndex
					temp = digits[i];
					digits[i] = digits[i+1];
					digits[i+1] = temp;
				}
			}
		}
		long time2 = new Date().getTime();
		System.out.println("expended time: "+(time2-time1)+" ms");
//		System.out.println("数据排序消耗的时间: "+(time2-time1)+"毫秒");
		// 排好序后输出
		for(int j=0;j<digits.length;j++){
			System.out.print(digits[j]+",");
		}
	}
	/** 维基百科上的JAVA冒泡排序,学习了!*/
	protected void bubbleSort2(int[] digits){
		
		long time1 = new Date().getTime();
		int temp = 0;
		for(int i= digits.length - 1;i > 0; --i){// 排序的轮数
			for(int j=0;j<i;++j){// 每一轮排序。每轮过后要排序的数字减少一个,非常好。
				if(digits[j] > digits[j+1]){
					temp = digits[j];
					digits[j] = digits[j+1];
					digits[j+1] = temp;
				}
			}
		}
		long time2 = new Date().getTime();
		// 输出排序消耗的时间
		System.out.println("\nexpended time: "+(time2-time1)+" ms");
		
		// 排好序后输出
		for(int j=0;j<digits.length;j++){
			System.out.print(digits[j]+",");
		}
	}
	
	private int[] digits = {3,5,8,6,9,78,32,50,11,30};	// 待排序的数字
	
	public static void main(String arg[]) throws IOException {
		
		Demos demo = new Demos();
		demo.bubbleSort(demo.digits);		// test Bubble Sort
		
		demo.bubbleSort2(demo.digits);		// test Bubble Sort2
		
	}

}

Java自我练习
public class Hello {
	public static void main(String[] args) {
//		System.out.println("Well done!");
		//int[] data = {12,5,3,11,20,6,10,45,87,9,13,38};
		//int[] data = {1,2,3,4,5,6,7,8,9,10};//最好的情况,1轮比较
		int[] data = {10,9,8,7,6,5,4,3,2,1};//最糟糕的情况,n-1轮比较
		bubble(data);
		bubbleV2(data);
//		for(int j=0;j<data.length;j++){
//			boolean exchange = false;
//			for(int i=0;i<data.length-1-j;i++){
//				System.out.println("compare "+i+" with "+(i+1));
//				if(data[i] > data[i+1]){
//					exchange = true;
//					int temp = data[i];
//					data[i] = data[i+1];
//					data[i+1] = temp;
//				}
//			}
//
//			for(int i=0;i<data.length;i++){
//				System.out.print(data[i]+"  ");
//			}
//			System.out.println();
//			if(!exchange){break;}
//		}
	}

	private static void bubble(int[] data){
		for(int j=0;j<data.length;j++){
			for(int i=0;i<data.length-1;i++){
				System.out.println("compare "+i+" with "+(i+1));
				if(data[i] > data[i+1]){
					int temp = data[i];
					data[i] = data[i+1];
					data[i+1] = temp;
				}
			}

			for(int i=0;i<data.length;i++){
				System.out.print(data[i]+"  ");
			}
			System.out.println();
		}
	}

	private static void bubbleV2(int[] data){
		for(int j=0;j<data.length;j++){
			boolean exchange = false;
			for(int i=0;i<data.length-1;i++){
				System.out.println("compare "+i+" with "+(i+1));
				if(data[i] > data[i+1]){
					exchange = true;
					int temp = data[i];
					data[i] = data[i+1];
					data[i+1] = temp;
				}
			}

			for(int i=0;i<data.length;i++){
				System.out.print(data[i]+"  ");
			}
			System.out.println();
			if(!exchange){break;}
		}
	}

	private static void bubbleV3(int[] data){
		for(int j=0;j<data.length;j++){
			boolean exchange = false;
			for(int i=0;i<data.length-1-j;i++){
				System.out.println("compare "+i+" with "+(i+1));
				if(data[i] > data[i+1]){
					exchange = true;
					int temp = data[i];
					data[i] = data[i+1];
					data[i+1] = temp;
				}
			}

			for(int i=0;i<data.length;i++){
				System.out.print(data[i]+"  ");
			}
			System.out.println();
			if(!exchange){break;}
		}
	}
}


 C语言实现

/* 冒泡排序C语言实现 */
#include <stdio.h>
/**/
void BubbleSort(int digits[],int count){
	int temp = 0;
	int i,j;
	for(i=count-1;i>0;--i){
		for(j=0;j<i;++j){
			if(digits[j] > digits[j+1]){
				temp = digits[j];
				digits[j] = digits[j+1];
				digits[j+1] = temp;
			}
		}
	}
}
void main(){
	
	int digits[] = {3,5,8,6,9,78,32,50,11,30};
	int i;
	/*clean early output*/
	clrscr();
	/*冒泡排序*/
	BubbleSort(digits,10);
	/*结果输出*/
	for(i=0;i<10;++i){
		printf("%4d",digits[i]);
	}
	/*when the user press the keyboard then exit*/
	getch();
}

 

  1. ===快速排序===
 

C语言实现

#include "stdio.h"
#include "string.h"
#include "conio.h"
#include "windows.h"

//一趟快速排序
int Partition(int a[], int low, int high)
{
	int pivotKey = a[low];//枢轴暂时取第一个数
	//如果low位置比high位置小
	while(low < high){
		while(low<high && a[high]>=pivotKey)	--high;//如果high位置数据比pivotKey大,则high向前移动一个位置
		a[low] = a[high];
		
		while(low<high && a[low]<pivotKey)	++low;//如果low位置数据比pivotKey小,则low向后移动一个位置
		a[high] = a[low];
	}
	a[low] = pivotKey;
	return low;
}
//输出一个数组
void printArray(int a[])
{
	for(int i=0;i<10;i++)
	{
		printf("%d,",a[i]);
	}
}
/***********************************************************
*
* Quick Sort快速排序(递归)
*
***********************************************************/
void Qsort(int a[],int low,int high)
{
	if(low < high)
	{
		int loc = Partition(a,low,high);
		Qsort(a,low,loc-1);
		Qsort(a,loc+1,high);
	}
}
/***********************************************************
*
* main() function
*
***********************************************************/
void main()
{
	printf("Hello World\n");
	//
	//int a[10]={8,1,4,9,6,3,5,2,7,0};
	int a[10]={49,38,65,97,76,13,27,49,25,50};
	//DWORD dwStart = GetTickCount();计算程序的运行时间
	Qsort(a,0,9);
	//DWORD dwEnd = GetTickCount();
	//printf("run time- %d\n",(dwEnd-dwStart));
	printArray(a);
	getch();//接收一次用户按键再exit程序
}


 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

排序算法学习 的相关文章

  • XMPP学习总结

    XMPP 详细参考 xff1a http en wikipedia org wiki XMPP Extensible Messaging and Presence Protocol XMPP is a communications prot
  • 最小外接矩形(MBR)

    最小外接矩形 MBR 可分为 1 最小面积外接矩形 Minimum Area Bounding Rectangle 简称 MABR 和 2 最小周长外接矩形 Minimum Perimter Bounding Rectangle 简称MPB
  • 迷宫问题算法分析

    首先给出经典的算法 xff0c 然后分析算法的实现 define MAX SIZE 8 int H 4 61 0 1 0 1 int V 4 61 1 0 1 0 char Maze MAX SIZE MAX SIZE 61 39 X 39
  • Android Canvas笔记

    Canvas画图相关 Canvas画图 画布基本功能的一个大概讲解 http www jb51 net article 38861 htm Canvas画布我的理解是它本身是无限大的 xff0c 但是代码获得的宽和高是与手机屏幕的分辨率有关
  • 关于HTTP

    HTTP status code 200 ok 302 redirect 关于重定向 java程序中如果要获取重定向之前的server信息 xff0c 调用HttpUrlConnection对象的setInstanceFollowRedir
  • 关于Android SD卡

    android手机的SD卡像电脑的硬盘 xff0c 现在很多手机都自带一个内置的SD卡 xff0c 是不可插拔的 xff0c 现在许多手机都称这个SD卡为ROM xff0c 感觉非常的不恰当 xff0c 因为ROM是Read Only Me
  • Android Studio使用经验

    1 Logcat相关 1 1Logcat日志过滤 4Tag awcn accs tnet dalvikvm JUtrack com umeng message Volley Timeline Gralloc FileCheckUtils g
  • Java 调用 ADB 命令截取安卓手机屏幕到PC

    原文引用 xff1a http blog sina com cn s blog 66e177dd0102w41i html 向作者致敬 原作者方案2中的fixBytes方法丢失了一些代码 xff0c 通过网络的搜索和一些尝试 xff0c 补
  • Android图片与屏幕适配问题

    Android程序要在不同尺寸的手机上运行 xff0c 界面常常变形 xff0c 有没有什么好的办法可以使程序适应不同尺寸的手机 xff0c 图片又可以保持原样 hdpi 72 x 72 mdpi 48 x 48 ldpi 36 x 36
  • Android资源文件使用经验

    5 关于尺寸单位 Android默认160dots per inch xff08 在屏幕dpi为160的时候 xff0c 1 dip 61 61 1 px xff09 有的手机是120 per inch density的值为120 160
  • Android常用功能代码

    非完全原创 xff0c 大多源自网络向作者致敬 xff01 26 汉字按拼音排序比较器 汉字按字母顺序排列的比较器 class PinyinComarator implements Comparator lt Contact gt 64 O
  • ubuntu11.10安装经验

    1 用u盘安装的 xff0c 用ultraISO写入硬盘镜像 不过安装过程中卡在ubuntu下面有几个点的界面 xff0c 解决办法 xff1a 把u盘里面的isolinux文件夹命名为syslinux就好了 2 安装前在windows7里
  • Java常用类练习

    public class Unit7 1 public static void main String args System out println args length for String str args System out p
  • Virtualbox 虚拟机网络不通解决

    在桥接模式下 xff0c 混杂模式要选拒绝 否则可能不通
  • java遍历目录中的文件

    1 从一个教程上看到java遍历目录输出目录里面的文件的一个例子 xff0c 里面用到了递归的算法思想 xff0c 记得上高中的时候数学上学过这种思想 xff0c 当时有个汉诺塔的故事 public static void main Str
  • Android常用技术、常用工具和开源项目

    待解决和待学习的Android技术问题 xff1a 横竖屏切换生命周期的执行 xff1b startActivityForResult的使用 xff1b 地图上标记路线 搜索内容 xff1b Properties的使用 View有两对wid
  • Java IO学习笔记

    Java不会 xff0c 就去学Android xff0c 简直是扯淡 xff01 后悔晚了 xff0c 奋起直追吧 File类 xff1b RandomAccessFile xff1b OutputStream InputStream 字
  • 关于Java输入输出流的疑问

    一段拷贝功能代码 import java io File import java io InputStream import java io OutputStream import java io FileOutputStream impo
  • android 2.* 下如何使用actionbar

    想在android2 下面使用actionbar 我们可以使用JakeWharton写的support library扩展 ActionBarSherlock 1 ActionBarSherlock主页 http actionbarsher

随机推荐

  • JAVA基础之理解JNI原理

    JAVA基础之理解JNI原理 JNI是JAVA标准平台中的一个重要功能 xff0c 它弥补了JAVA的与平台无关这一重大优点的不足 xff0c 在JAVA实现跨平台的同时 xff0c 也能与其它语言 xff08 如C C 43 43 xff
  • cmd命令学习

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 Lin
  • 编程学习和感悟

    1 程序开发 xff0c 从想法到做出来有一个过程 xff0c 这个过程被称为algorithm xff08 算法 xff09 例如 xff1a Android中加载图片 图片的异步加载 xff1a SoftReference 不能阻止gc
  • 程序员应该阅读的书

    程序员书 http book douban com doulist 995723 UNIX编程艺术
  • 读取手机参数

    手机操作系统版本获取 public static int getSDKVersionNumber int sdkVersion try sdkVersion 61 Integer valueOf android os Build VERSI
  • 关于ASP.NET 不允许所请求的注册表访问权。

    这个问题困扰了我一天 xff0c 到现在头还是疼的 xff0c 参考了网上N个解决办法 xff0c 最后问了孟宪会老师 xff0c 老师说 匿名账户没有访问注册表的权限 xff0c 通过老师提醒 xff0c 我试着启用GUEST账户 xff
  • android中的density

    原帖地址 xff1a http blog csdn net zouxueping article details 5605332 向作者致谢 为什么要引入dip The reason for dip to exist is simple e
  • Doxygen code style

    64 file LifeActivity java 64 brief Android lifecycle test lt pre gt lt b gt company lt b gt http www microsoft com lt pr
  • Android中自定义属性的格式详解

    1 reference xff1a 参考某一资源ID xff08 1 xff09 属性定义 xff1a lt declare styleable name 61 34 名称 34 gt lt attr name 61 34 backgrou
  • 物理和数学

    内容来自于 加速度 xff08 Acceleration xff09 是速度变化量与发生这一变化所用时间的比值 是描述物体速度改变快慢的物理量 xff0c 通常用a表示 xff0c 单位是m s 2 xff08 米 秒 2 xff09 在物
  • android Activity LifeCycle

    android横竖屏切换时候的Activity LifeCycle 程序启动 01 23 18 33 47 711 I MainActivity 11233 gt onCreate 01 23 18 33 47 711 I MainActi
  • Java判断字符串是否为空的方法

    以下是 Java 判断字符串是否为空的几种方法 方法一 最多人使用的一个方法 直观 方便 但效率很低 方法二 比较字符串长度 效率高 是我知道的最好一个方法 方法三 Java SE 6 0 才开始提供的办法 效率和方法二基本上相等 但出于兼
  • 64位windows7的安装和系统分区扩展

    今天哥带来一台HASEE笔记本 xff0c 2G内存 xff0c i3处理器 xff0c 300G的硬盘 xff0c 让我装一个64位的windows7 因为只有安装64位的系统才能发挥出64位硬件的性能 xff0c 否则真是浪费硬件性能资
  • 汇编语言Assembly Language

    想念wangfeng老师 xff0c 他将深奥的汇编语言解析的是那么透彻明白 xff0c 身为学生的我真的受益良多 字符 十六进制ASCII 0 9 30h 39h A Z 41h 5ah a z 61h 7ah 逻辑运算 xff1a 与
  • SVN的使用

    1 Attempted to lock an already locked dir svn Working copy 39 x mywork project res layout 39 locked 原因 xff1a 产生这种情况大多是因为
  • 注册表文件的编写

    Windows 中的注册表文件 xff08 system dat和 user dat xff09 是 Windows 的核心数据库 xff0c 因此 xff0c 对 Windows 来说是非常重要的 通过修改注册表文件中的数据 xff0c
  • ASP.NET网站安装部署,加入注册码验证等等

    最近通过自己实践 xff0c 完成了ASP NET网站安装部署 xff0c 实现了SQL打包 xff0c 实现了配置文件的打包等等 xff0c 并实现了注册码的验证等等 xff0c 如有需要请跟帖 xff0c 留下联系方式
  • Windows使用经验收集

    19 最快的编辑任意网页代码 打开浏览器 xff0c 浏览一个网页 xff0c 按下F12打开开发人员工具 xff0c 然后点击console xff0c 也就是控制台 xff0c 输入 document body contentEdita
  • 如何提高自己的编程能力

    原帖地址 xff1a http www blogjava net xvridan archive 2007 02 17 100143 html 1 扎实的基础 数据结构 离散数学 编译原理 xff0c 这些是所有计算机科学的基础 xff0c
  • 排序算法学习

    61 61 61 冒泡排序 61 61 61 JAVA语言实现 学习冒泡排序 冒泡排序 xff08 Bubble Sort xff0c 台湾译为 xff1a 泡沫排序或气泡排序 xff09 是一种简单的排序算法 它重复地走访过要排序的数列