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

数据结构算法的一些归纳(部分含Java实现)

阅读更多
直接插入排序
说明:逐个将后一个数加到前面的排好的序中。在直接插入排序过程中,对其中一个记录的插入排序称为一次
排序;直接插入排序是从第二个记录开始进行的,因此,长度为n的记录序列需要进行n-1次排序才能完成整个
序列的排序。时间复杂度为O(n2)。

/*用直接插入法对x[0]-x[n-1]排序*/
void InsertSort(elemtype x[],int n) {
int i,j;
elemtype s;
for(i=0;i<n-1;i++) {
  s=x[i+1];
    j=i;
    while(j>-1&&s.key<x[j].key){
     x[j+1]=x[j];
     j--;
   }
         x[j+1]=s;
}
}

Java 代码实现
public static void main(String[] args) {
int[] a = { 4, 3, 7, 1, 6 };
int use = 0;
int j = 0;
for (int i = 0; i < 4; i++) {
use = a[i + 1];
j = i;
while (j > -1 && use < a[j]) {
a[j + 1] = a[j];
j--;
}
//再每一次排完后,把use放到合适的位置
a[j + 1] = use;
}

for (int i = 0; i < 5; i++) {
System.out.println(a[i]);
}
}
---------------------
希尔排序
说明:希尔排序又称缩小增量排序,增量di可以有各种不同的取法,但最后一次排序时的增量必须为1,最简

单可取di+1=di/2(取小)。时间复杂度为O(n(log2n)2)。

void ShellSort(elemtype x[],int n,intd[],int Number)
/*用希尔排序法对记录x[0]-x[n-1]排序,d为增量值数组*/
/*Number为增量值个数,各组内采用直接插入法排序*/
{
int i,j,k,m,Span;
elemtype s;
for(m=0;m<Number;m++)
{
    Span=d[m];
    for(k=0;k<Span;k++)
    {
     for(i=k;i<n-1;i+=Span)/*这个for之后的是“组内采用直接插入法排序”*/
      {
       s=x[i+Span];
       j=i;
       while(j>-1&&s.key<x[j].key)
       {
         x[j+Span]=x[j];
         j-=Span;
       }
       x[j+Span]=s;
      }
    }
}
}

----------------------------
直接选择排序
说明:每次将后面的最小的找出来插入前面的已排好的序中。同理,具有n个记录的序列要做n-1次排序。
时间复杂度为O(n2)。
void SelectSort(elemtype x[],int n)
/*用直接选择排序法对x[0]-x[n-1]排序*/
{
int i,j,Small;
elemtype Temp;
for(i=0;i<n-1;i++)
{
    Small=i;
    for(j=i+1;j<n;j++)
     if(x[j].key<x[Small].key)
       Small=j;
   
    if(Small!=i)
     {
       Temp=x[i];
       x[i]=x[Small];
       x[Small]=Temp;
     }
}
}
Java代码实现
public static void main(String[] args) {
int[] x = { 4, 3, 7, 1, 6 };
int i, j, Small;
int Temp;
for (i = 0; i < 4; i++) {
Small = i;
for (j = i + 1; j < 5; j++)
if (x[j] < x[Small])
Small = j;

if (Small != i) {
Temp = x[i];
x[i] = x[Small];
x[Small] = Temp;
}
}
for(i = 0; i < 5; i++){
System.out.println(x[i]);
}
}
--------------------------
冒泡排序
说明:两个两个比较,将大的往后移。通过第一次冒泡排序,使得待排序的n个记录中关键字最大的记录排到

了序列的最后一个位置上。然后对序列中前n-1个记录进行第二次冒泡排序。。。对于n个记录的序列,共需进

行n次冒泡排序。时间复杂度为O(n2)。

void BubbleSort(elemtype x[],int n)
/*用冒泡排序法对x[0]-x[n-1]排序*/
{
int i,j,flag=1;
elemtype Temp;
for(i=1;i<n&&flag==1;i++)
{
    flag=0;
    for(j=0;j<n-i;j++)
    {
      if(x[j].key>x[j+1].key)
       {
          flag=1;
          Temp=x[j];
          x[j]=x[j+1];
          x[j+1]=Temp;
       }
    }
}
}
Java代码实现
public static void main(String[] args) {
int[] a = { 4, 3, 7, 1, 6 };
int i, j;
int Temp;
for (i = 1; i < 5 ; i++) {
for (j = 0; j < 5 - i; j++) {
if (a[j] > a[j + 1]) {
Temp = a[j];
a[j] = a[j + 1];
a[j + 1] = Temp;
}
}
}
for (i = 0; i < 5; i++) {
System.out.println(a[i]);
}
}
-----------------------------
快速排序
说明:又叫分区交换排序,是对冒泡排序方法的一种改进。时间复杂度为O(nlog2n)。

void QuickSort(elemtype x[],int low,int high)
/*用递归方法对记录x[0]-x[n-1]进行快速排序*/
{
int i,j;
elemtype Temp;

i=low;
j=high;
Temp=x[low];

while(i<j)
{
    /*在序列的右端扫描*/
    while(i<j&&Temp.key<=x[j].key)j--;
    if(i<j)
    {
      x[i]=x[j];
      i++;
    }

    /*在序列的左端扫描*/
    while(i<j&&x[i].key<Temp.key)i++;
    if(i<j)
    {
      x[j]=x[i];
      j--;
    }
}
    x[i]=Temp;

   /*对子序列进行快速排序*/
   if(low<i-1)QuickSort(x,low,i-1);
   if(j+1<high)QuickSort(x,j+1,high);
}

-------------------------
归并排序
说明:所谓归并排序就是将两个或两个以上的有序数据序列合并成一个有序数据序列的过程。
时间复杂度为O(nlog2n)。

void merge(r,l,m,h,r1,r2)/*r[l,m]及r[m+1,h]分别有序,归并后置于r2中*/
sqlist r,r2;
int l,m,h;
{
int i,j,k;
k=l;/*k是r2的指示器,i、j分别为s1、s2的指示器*/
i=l;
j=m+1;

while(i<=m&&j<=h)
{
    if(r[i].key<=r[j].key)
     {
        r2[k]=r[i];
        i++;
     }
    else
     {
        r2[k]=r[j];
        j++;
     }
    k++;
}
if(i>m) /*s1结束*/
   while(j<=h)
   {
    r2[k]=r[j];
    j++;k++;
   }
else
   while(i<=m)
    {
      r2[k]=r[i];
      i++;k++;
    }
}
0
0
分享到:
评论

相关推荐

    java实现的数据结构与算法

    《Java实现的数据结构与算法》是一本全面介绍数据结构和算法实现的书籍,以Java语言为载体,涵盖了面向对象程序设计的基本概念和特性,并深入探讨了数据结构与算法的方方面面,包括各种数据结构的基本概念、算法的...

    数据结构与算法分析(Java语言描述)习题答案(第三版).docx

    在《数据结构与算法分析(Java语言描述)》(第三版)这本教材中,我们看到涉及了关于数据结构、算法以及程序设计的基础概念。在给出的文档中,部分题目和答案涵盖了递归、数学推理、文件处理以及计算理论等多个方面...

    数据结构与算法(JAVA语言版解密)

    本书《数据结构与算法(JAVA语言版解密)》详细介绍了数据结构和算法的基本概念,以及如何使用Java语言实现这些数据结构和算法。书中内容涵盖了面向对象程序设计的基础知识、数据结构与算法的核心理论、以及各类数据...

    数据结构与算法(Java语言版) 周鹏 三峡大学理学院

    标题《数据结构与算法(Java语言版)》以及作者周鹏所著的书籍,主要为三峡大学理学院的课程教材,内容基本上遵循严蔚敏的经典教材结构,并且包含了具体的Java代码实现。本书的内容体系主要分为九章,涵盖了数据结构...

    数据结构与算法(JAVA语言版)

    ### 数据结构与算法(JAVA语言版) #### Java与面向对象程序设计 - **Java语言基础知识** - **基本数据类型及运算**:介绍Java中的基本数据类型,包括整型、浮点型、字符型等,并解释了这些类型的运算规则。 - *...

    数据结构与算法(Java版)

    ### 数据结构与算法(Java版) #### Java与面向对象程序设计 **知识点:** 1. **Java语言基础知识:** - **基本数据类型及运算:** Java中的基本数据类型包括整型(int, short, long等)、浮点型(float, double)、...

    数据结构算法JAVA

    ### 数据结构算法JAVA #### 知识点概览 本篇文档主要介绍了使用Java语言进行数据结构和算法的学习与实践,覆盖了从Java基础到高级数据结构与算法的多个方面。文档按照章节展开,每章内容都围绕一个核心主题进行...

    数据结构与算法(java语言版)

    ### 数据结构与算法(Java语言版) #### Java与面向对象程序设计 - **Java语言基础知识** - **基本数据类型及运算**:介绍Java中的基本数据类型,包括整型、浮点型、字符型等,并解释了它们之间的运算规则。 - *...

    JAVA语言版数据结构与算法

    以上是对《JAVA语言版数据结构与算法》部分知识点的详细解读,涵盖了数据结构、算法设计与分析的基础知识,以及具体的实现方法和技术细节。通过对这些知识点的学习,读者可以建立起对数据结构与算法较为全面的理解,...

    JAVA数据结构与算法

    ### JAVA数据结构与算法 #### Java与面向对象程序设计 - **Java语言基础知识** - **基本数据类型及运算**:介绍了Java中的基本数据类型(如整型、浮点型等)及其运算规则。 - **流程控制语句**:讨论了条件语句...

Global site tag (gtag.js) - Google Analytics