今天刚学习了点java数据结构,一开始就看到的排序的问题,就往下看了,java基本的排序方法有三种:冒泡,选择,插入。
以前一直认为选择排序就是冒泡排序。看了书中的解释,明白了冒泡排序和选择排序不能混为一谈。
经过消化,我稍微懂了它们的原理。
冒泡排序是取一个数据a,然后和这个数据右边的数据b进行比较,如果a比b大,a就往右移动,也就是变到b的右边(程序中可通过交换实现)。写两个循环,代码如下
//冒泡排序
public class BubbleSort
{
private static int[] total={2,8,1,9,4,11,3,7,5,6,10};
public static void main(String[] args)
{
long start=System.currentTimeMillis();
//此处out可>0,但没必要,三个数据只用一次冒泡排序即可得出结果
for(int out=total.length-1;out>1;out--)
{
for (int i = 0; i < out; i++)
{
if(total[i]>total[i+1])
{
swap(i,i+1);
}
}
}
//打印结果
for(int i=0;i<total.length;i++)
{
System.out.print(total[i]+" ");
}
long end=System.currentTimeMillis();
System.out.print("花费时间:"+(end-start));
}
public static void swap(int a,int b)
{
int temp=total[a];
total[a]=total[b];
total[b]=temp;
}
}
这就是冒泡排序。
然后我理解选择排序为取一个数a,将a和其它未进行排序过的数据进行比较。如果哪个比a小,就和a交换位置,这样a就是未排序过的数据中最小的了.代码如下
//选择排序
public class ChooseSort
{
private static int[] total={2,8,1,9,4,11,3,7,5,6,10};
public static void main(String[] args)
{
long start=System.currentTimeMillis();
for(int i=0;i<total.length-1;i++)
{
for(int j=i+1;j<total.length;j++)
{
if(total[i]>total[j])
{
swap(i,j);
}
}
}
//打印结果
for(int i=0;i<total.length;i++)
{
System.out.print(total[i]+" ");
}
long end=System.currentTimeMillis();
System.out.print("花费时间:"+(end-start));
}
public static void swap(int a,int b)
{
int temp=total[a];
total[a]=total[b];
total[b]=temp;
}
}
插入排序就是 一些数据部分排序过,比如左边1-5号位置排序过(小到大),6-10位置未排序,那么可以将第六个位置数据取出,然后1-5位置的数据向前移动(就是第六个位置移动),移动之前必须比较与取出的第六个位置的数据进行比较,如果大于第六个位置的数据就向前移动,否则不移动并将取出的第六个数据重新填到空的位置里。代码如下
//插入排序
public class InsertSort
{
private static int in;
private static int[] total={2,8,1,9,4,11,3,7,5,6,10};
public static void main(String[] args)
{
for(int out=1;out<total.length;out++)
{
int temp=total[out];
in=out;
while(in>0 && total[in-1]>=temp)
{
total[in]=total[in-1];
--in;
}
total[in]=temp;
}
//打印结果
for(int i=0;i<total.length;i++)
{
System.out.print(total[i]+" ");
}
}
}
另外还有一种排序叫希尔排序,是插入排序的一种。
public static<T extends Comparable<? super T>>
void incrementalSort(T[] a,int first,int last,int space)
{
int unsorted,index;
for(unsorted=first+space;unsorted<=last;unsorted=unsorted+space)
{
T firstUnsorted=a[unsorted];
for(index =unsorted-space;index>=first&&firstUnsorted.compareTo(a[index])<0;index=index-space)
{
a[index+space]=a[index];
}
a[index+space]=firstUnsorted;
}
}
public static<T extends Comparable<? super T>> void shellSort(T[] a,int first,int last)
{
int n=last-first+1;
for(int space=n/2;space>0;space=space/2)
{
for(int begin=first;begin<first+space;begin++)
{
incrementalSort(a, begin, last, space);
}
}
}
调用shellSort即可。
分享到:
相关推荐
4. **希尔排序**:希尔排序是插入排序的优化版,它通过将数组按照一定的增量分组进行插入排序,然后逐渐减小增量,直到增量为1,完成排序。Java实现时,需要定义增量序列,如初始值为数组长度的一半,然后每次减半,...
希尔排序是插入排序的一种优化版本,通过设定一个增量序列,将待排序的数组按照增量分成多个子序列,对每个子序列进行插入排序,最后减小增量,直至为1,整个数组有序。这种方法减少了元素移动的次数,提高了排序...
本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
八种排序算法原理及Java实现是排序算法中的一种,包括冒泡排序、快速排序、直接插入排序、希尔排序、选择排序、归并排序和基数排序等。 冒泡排序是八种排序算法中的一种,属于交换排序。冒泡排序的基本思想是重复...
本篇文章将深入探讨四种基本的排序算法:冒泡排序、选择排序、插入排序以及希尔排序,并结合递归算法的复杂度进行分析。这些排序算法在不同的场景下有不同的效率表现,理解它们的原理和复杂度可以帮助我们更好地选择...
这里我们将深入探讨快速排序、归并排序、希尔排序、冒泡排序、选择排序以及插入排序这六种经典的排序算法,并通过Java语言来实现它们。 1. **快速排序**:由C.A.R. Hoare在1960年提出,是基于分治策略的一种高效...
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...
根据给定文件中的标题、描述、标签以及部分内容,本文将详细介绍冒泡排序、选择排序、插入排序、希尔排序以及利用Java内置方法进行排序这五种排序算法的具体实现过程及其背后的逻辑原理。 ### 一、冒泡排序 冒泡...
数据结构之排序算法,使用Java实现,包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序_Data-Structure-Sort-Algorithm
该源文件包括三种排序算法,实现效率教高,代码量也不大
希尔排序是插入排序的一种更高效的改进版本,也称缩小增量排序。它是基于插入排序的,但通过将待排序的元素按照一定的间隔分组,对每组进行插入排序,随着间隔逐渐减小,最终达到整个序列有序的目的。希尔排序的...
冒泡排序 3. 插入排序 4. 希尔排序 5. 堆排序 6. 归并排序 7. 快速排序 8. 基数排序 9. 计数排序 10. 桶排序 十种排序代码 我的博文地址:http://blog.csdn.net/u010156024/article/details/48932219
这里我们主要探讨的是五种不同的排序算法:插入排序、选择排序、快速排序、希尔排序以及冒泡排序,它们都有对应的链表实现。让我们逐一深入理解这些算法。 1. 插入排序(Insertion Sort) 插入排序是一种简单直观...
设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。 要求: 1.可以对任何简单类型和任意对象进行排序 2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法...
标签中的“八大排序”指的是计算机科学中常见的八种排序算法:冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序、希尔排序和计数排序。这些排序算法各有特点,适用场景也不同,理解它们可以帮助我们更好地...
java实现10种排序算法:选择排序、冒泡排序、插入排序、快速排序、归并排序、堆排序、希尔排序、桶排_sorting-algorithms
当数据规模较小时,应选择直接插入排序或冒泡排序。如果全部是正整数,可以考虑使用桶排序为最优。考虑数据已有顺序,快速排序是一种不稳定的排序(当然可以改进),对于大部分排好的数据,快速排序会浪费大量不必要...
Java 类实现的五种排序算法包括冒泡排序、选择排序、插入排序、希尔排序以及数组排序(实际上这里指的是使用 `java.util.Arrays.sort()` 方法)。这些排序算法是数据结构与算法领域中的基本操作,用于对一组数值进行...
6. **希尔排序(Shell Sort)**:希尔排序是插入排序的一种更高效的改进版本。它通过比较相距一定间隔的元素来工作,随着比较间隔的逐渐减小,直到间隔为1时,此时希尔排序退化为插入排序。这种算法有效地减少了元素...