`
edr_
  • 浏览: 169524 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

常见内部排序算法之交换排序

阅读更多
交换排序,就是不断的交换,一直到适合为止。选择排序主要是不断的选择,然后才交换。
交换排序有两种:
冒泡排序:就像是气泡一样,小的(轻的)一直向上浮动。从最后一个开始一直向前比较,如果比较它小的话就交换。一直滚到最前(相对,如果前面已经循环一次了,则是第二位)。
下面是代码:(下降,大的往后排)
package test.aglorith;

import java.util.Arrays;

public class BubbleSort {
	
	public static void sort(int[] data) {
		int data_len=data.length;
		for(int i=0;i<data_len-1;i++){
			for (int j = 1; j < data_len-i; j++) {
				if (data[j-1]>data[j]) {
					int temp=data[j-1];
					data[j-1]=data[j];
					data[j]=temp;
				}
			}
			System.out.println(Arrays.toString(data));
		}
	}
	
	public static void main(String[] args) {
		int[] data=new int[]{10,9,8,7,6,5,4,3,2,1};
		System.out.println(Arrays.toString(data));
		sort(data);
	}

}

快速排序:以第0个数作为中间数,第一个数下标跟最后一个数下标往中间夹,使得左边都比中间数小,右边比中间数大或者相等(恕我表达能力有限)。这样中间数就成为数组分界线了,把数组分成两拨,左边一拨,右边一拨,各自继续排序。以此递归。
代码:(从小到大)
package test.aglorith;

import java.util.Arrays;

public class QuickSort {
	
	public static void sort(int[] data,int low,int hight) {
		if (hight-low==1) {
			if (data[hight]<data[low]) {
				swap(data, low, hight);
			}
		}
		if (hight-low>1) {
			int left=low+1;
			int right=hight;
			int temp=data[low];
			while (left<=right) {
				while (left<hight) {
					if (data[left]<temp) {
						left++;
					}else {
						break;
					}
				}
				while (right>low) {
					if (data[right]>=temp) {
						right--;
					}else {
						break;
					}
				}
				if (left<right) {
					swap(data, left, right);
					left++;
					right--;
				}
			}
			swap(data, low, right);
			System.out.println(Arrays.toString(data));
			sort(data, low, right-1);
			sort(data, right+1, hight);
		}
	}
	public static void swap(int[] data,int i,int j) {
		int temp=data[i];
		data[i]=data[j];
		data[j]=temp;
	}
	public static void main(String[] args) {
		int[] data=new int[]{5,1,6,4,5,3,2,7};
		System.out.println(Arrays.toString(data));
		sort(data,0,data.length-1);
		System.out.println(Arrays.toString(data));
	}
}
1
2
分享到:
评论

相关推荐

    数据结构课程设计(内部排序算法比较_C语言)

    常见的内部排序算法包括但不限于: 1. **直接插入排序**:逐个遍历列表中的每个元素,将其插入到已排序序列的正确位置。适用于小规模数据集。 2. **冒泡排序**:重复遍历待排序序列,每次遍历时比较相邻两个元素,...

    C语言数据结构内部排序算法及比较

    本文将深入探讨“C语言数据结构内部排序算法及比较”这一主题,结合个人课程作业的经验,对一些核心概念进行阐述,并对常见的内部排序算法进行比较。 首先,数据结构是组织和管理数据的方式,它包括数组、链表、树...

    数据机构综合课设内部排序算法比较.docx

    本篇文章将深入探讨10种常见的内部排序算法,包括它们的基本思想、比较次数和移动次数的计算,以便更直观地理解不同算法的效率。 1. **直接插入排序**: 直接插入排序是一种简单的排序算法,它通过比较新元素与已...

    常用的排序算法总结(各种内部排序算法和外部排序算法)

    本文将对几种常见的内部排序算法和外部排序算法进行详细总结。 首先,排序的基本定义是:给定一个包含n个记录的序列,其关键字序列分别为K1, K2, ..., Kn,如果存在一个排列p1, p2, p3, ..., pn,使得关键字满足非...

    内部排序算法的性能分析

    本项目针对内部排序算法进行了性能分析,通过设计一个测试程序,对比了几种常见内部排序算法的关键字比较次数和移动次数,以帮助我们更直观地理解不同算法的效率差异。以下是关于内部排序算法的一些关键知识点: 1....

    内部排序算法比较

    本报告主要关注了六种常见的内部排序算法:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序和堆排序,并通过实验比较它们在不同数据状态下的效率。 **一、算法原理** 1. **起泡排序**:通过不断交换...

    数据结构课程设计(内部排序算法比较).

    内部排序算法是计算机科学基础课程——数据结构与算法中的核心内容之一。通过学习不同的内部排序算法,可以深刻理解算法的设计思想及其实现方法,同时也能为解决实际问题提供多种选择方案。 ### 常见的内部排序算法...

    广东工业大学_数据结构(内部排序算法)实验报告

    广东工业大学的数据结构实验报告重点关注了几种常见的内部排序算法,包括直接插入排序、选择排序和快速排序。这些算法在不同的场景下具有不同的性能特征。 **直接插入排序**是一种简单直观的排序方法,适用于小规模...

    内部排序算法的比较

    本篇文章将深入探讨六种常见的内部排序算法:希尔排序、直接选择排序、快速排序、直接插入排序、堆排序以及冒泡排序。 希尔排序是一种基于插入排序的算法,由希尔在1959年提出。它通过将待排序数组按某个增量分组,...

    c++内部排序算法比较

    本文将深入探讨七种常见的内部排序算法:直接插入排序、折半插入排序、冒泡排序、简单选择排序、希尔排序、快速排序以及堆排序。通过对这些算法的比较次数和移动次数的分析,我们可以更好地理解它们的效率和适用场景...

    内部排序算法性能分析

    本资源包含快速排序、希尔排序、冒泡排序、插入排序等六种常见的内部排序算法的性能分析,通过源代码和相关文档,我们可以深入理解这些算法的工作原理以及它们在不同情况下的性能表现。 1. **快速排序**:由C.A.R. ...

    课程设计 内部排序算法比较

    下面我们将深入分析几种常见的内部排序算法:冒泡排序、选择排序、快速排序、插入排序以及希尔排序,并着重讨论它们在比较次数和移动次数上的表现。 ### 冒泡排序 冒泡排序是一种简单的排序算法,它重复地遍历待...

    数据结构课程设计(内部排序算法比较)

    描述中提到,该设计已经通过了C语言的验证并能顺利运行,这意味着学生可能实现了如快速排序、归并排序、堆排序、插入排序、选择排序、冒泡排序、希尔排序等常见内部排序算法。每种算法都有其独特性,适用于不同的...

    内部排序算法分析与代码算法

    在本篇文章中,我们将深入探讨几种常见的内部排序算法,包括它们的原理、时间复杂度和空间复杂度,并通过代码实现来展示这些算法的运作过程。 1. 直接插入排序: 直接插入排序是一种简单的排序算法,它将数据分为已...

    内部排序图形化界面

    本文将详细探讨一款基于C++开发的内部排序图形化界面,该界面采用Microsoft Foundation Classes (MFC)库构建,实现了包括冒泡法、快速排序在内的六种常见排序算法,并提供了实时查看排序过程的功能,为学习和理解...

    内部排序算法比较、哈希表设计

    内部排序指的是数据在内存中进行的排序过程,常见的内部排序算法有以下几种: 1. **冒泡排序**:是最简单的排序方法,通过多次遍历数组,每次比较相邻元素并交换位置来实现排序。虽然效率较低,但易于理解和实现。 ...

Global site tag (gtag.js) - Google Analytics