博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java数据结构和算法-------第三章
阅读量:5749 次
发布时间:2019-06-18

本文共 6941 字,大约阅读时间需要 23 分钟。

---恢复内容开始---

第三章  简单排序

这一章将介绍三种基础的排序算法,冒泡,选择,插入排序。这三种排序的所有操作归结起来就是两步:比较和交换

冒泡排序

永远只比较相邻的两个元素,大的就放到右边,第一次冒泡完最大的元素一定在序列的最右端。第一趟冒泡进行了N-1次比较,第二趟是N-2次,以此类推。。所以冒泡算法的时间复杂度是O(N^2)。

void bubbleSort(int a[])

{

   for(int i=0;i<a.length;i++)

       for(int j=i;j<a.length;j++)//我这样排序出问题啦,这样写代码默认每一趟排序最小的在最左边,显然不是。

           if(a[j]>a[j+1])

               swap(a[j],a[j+1]);

}

 

冒泡排序只能保证每一次排序最大的在最右边。因此需要修改代码。

 

void bubbleSort(int a[])

 

{

 

   for(int i=a.length-1;i>1;i--)

 

       for(int j=0;j<i;j++)//无论何时,看到一个循环嵌套在另外一个循环中时,时间复杂度均为N^2级

 

           if(a[j]>a[j+1])

 

               swap(a[j],a[j+1]);

}

选择排序

选择排序(选最小的来比较)是改进了的冒泡排序,它将交换次数从N的平方降到了N,但是不幸的是比较次数仍然为N的平方。

选择排序和冒泡排序很类似,只是每一趟排序,不再是相邻的两个数比较,而是和上一趟的最小数比较,小的又被设置为比较的基准。所以交换次数是N。

代码如下:

void public selectionSort(int a[])

{  

    for(int i=0;i<a.length;i++)

       {

        min=a[i];

        for(int j=i;j<a.length;j++)

           if(a[j]<min)//每次比较的都是上一次的最小

          min=a[j];

         swap(a[i],min);

        }

}

插入排序

插入排序是本章中所有排序中最快的一种排序方式,但是比较麻烦。该排序算法的前提是局部有序

 

---恢复内容结束---

第三章  简单排序

这一章将介绍三种基础的排序算法,冒泡,选择,插入排序。这三种排序的所有操作归结起来就是两步:比较和交换

冒泡排序

永远只比较相邻的两个元素,大的就放到右边,第一次冒泡完最大的元素一定在序列的最右端。第一趟冒泡进行了N-1次比较,第二趟是N-2次,以此类推。。所以冒泡算法的时间复杂度是O(N^2)。

void bubbleSort(int a[])

{

   for(int i=0;i<a.length;i++)

       for(int j=i;j<a.length;j++)//我这样排序出问题啦,这样写代码默认每一趟排序最小的在最左边,显然不是。

           if(a[j]>a[j+1])

               swap(a[j],a[j+1]);

}

 

冒泡排序只能保证每一次排序最大的在最右边。因此需要修改代码。

 

void bubbleSort(int a[])

 

{

 

   for(int i=a.length-1;i>1;i--)

 

       for(int j=0;j<i;j++)//无论何时,看到一个循环嵌套在另外一个循环中时,时间复杂度均为N^2级

 

           if(a[j]>a[j+1])

 

               swap(a[j],a[j+1]);

}

选择排序

选择排序(选最小的来比较)是改进了的冒泡排序,它将交换次数从N的平方降到了N,但是不幸的是比较次数仍然为N的平方。

选择排序和冒泡排序很类似,只是每一趟排序,不再是相邻的两个数比较,而是和上一趟的最小数比较,小的又被设置为比较的基准。所以交换次数是N。

代码如下:

void public selectionSort(int a[])

{  

    for(int i=0;i<a.length;i++)

       {

        min=a[i];

        for(int j=i;j<a.length;j++)

           if(a[j]<min)//每次比较的都是上一次的最小

          min=a[j];

         swap(a[i],min);

        }

}

插入排序

插入排序是本章中所有排序中最快的一种排序方式,但是比较麻烦。该排序算法的前提是局部有序

 

---恢复内容开始---

第三章  简单排序

这一章将介绍三种基础的排序算法,冒泡,选择,插入排序。这三种排序的所有操作归结起来就是两步:比较和交换

冒泡排序

永远只比较相邻的两个元素,大的就放到右边,第一次冒泡完最大的元素一定在序列的最右端。第一趟冒泡进行了N-1次比较,第二趟是N-2次,以此类推。。所以冒泡算法的时间复杂度是O(N^2)。

void bubbleSort(int a[])

{

   for(int i=0;i<a.length;i++)

       for(int j=i;j<a.length;j++)//我这样排序出问题啦,这样写代码默认每一趟排序最小的在最左边,显然不是。

           if(a[j]>a[j+1])

               swap(a[j],a[j+1]);

}

 

冒泡排序只能保证每一次排序最大的在最右边。因此需要修改代码。

 

void bubbleSort(int a[])

 

{

 

   for(int i=a.length-1;i>1;i--)

 

       for(int j=0;j<i;j++)//无论何时,看到一个循环嵌套在另外一个循环中时,时间复杂度均为N^2级

 

           if(a[j]>a[j+1])

 

               swap(a[j],a[j+1]);

}

选择排序

选择排序(选最小的来比较)是改进了的冒泡排序,它将交换次数从N的平方降到了N,但是不幸的是比较次数仍然为N的平方。

选择排序和冒泡排序很类似,只是每一趟排序,不再是相邻的两个数比较,而是和上一趟的最小数比较,小的又被设置为比较的基准。所以交换次数是N。

代码如下:

void public selectionSort(int a[])

{  

    for(int i=0;i<a.length;i++)

       {

        min=a[i];

        for(int j=i;j<a.length;j++)

           if(a[j]<min)//每次比较的都是上一次的最小

          min=a[j];

         swap(a[i],min);

        }

}

插入排序

插入排序是本章中所有排序中最快的一种排序方式,但是比较麻烦。该排序算法的前提是局部有序

 

---恢复内容结束---

第三章  简单排序

这一章将介绍三种基础的排序算法,冒泡,选择,插入排序。这三种排序的所有操作归结起来就是两步:比较和交换

冒泡排序

永远只比较相邻的两个元素,大的就放到右边,第一次冒泡完最大的元素一定在序列的最右端。第一趟冒泡进行了N-1次比较,第二趟是N-2次,以此类推。。所以冒泡算法的时间复杂度是O(N^2)。

void bubbleSort(int a[])

{

   for(int i=0;i<a.length;i++)

       for(int j=i;j<a.length;j++)//我这样排序出问题啦,这样写代码默认每一趟排序最小的在最左边,显然不是。

           if(a[j]>a[j+1])

               swap(a[j],a[j+1]);

}

 

冒泡排序只能保证每一次排序最大的在最右边。因此需要修改代码。

 

void bubbleSort(int a[])

 

{

 

   for(int i=a.length-1;i>1;i--)

 

       for(int j=0;j<i;j++)//无论何时,看到一个循环嵌套在另外一个循环中时,时间复杂度均为N^2级

 

           if(a[j]>a[j+1])

 

               swap(a[j],a[j+1]);

}

选择排序

选择排序(选最小的来比较)是改进了的冒泡排序,它将交换次数从N的平方降到了N,但是不幸的是比较次数仍然为N的平方。

选择排序和冒泡排序很类似,只是每一趟排序,不再是相邻的两个数比较,而是和上一趟的最小数比较,小的又被设置为比较的基准。所以交换次数是N。

代码如下:

void public selectionSort(int a[])

{  

    for(int i=0;i<a.length;i++)

       {

        min=a[i];

        for(int j=i;j<a.length;j++)

           if(a[j]<min)//每次比较的都是上一次的最小

          min=a[j];

         swap(a[i],min);

        }

}

插入排序

插入排序是本章中所有排序中最快的一种排序方式,但是比较麻烦。该排序算法的前提是局部有序

 

---恢复内容开始---

第三章  简单排序

这一章将介绍三种基础的排序算法,冒泡,选择,插入排序。这三种排序的所有操作归结起来就是两步:比较和交换

冒泡排序

永远只比较相邻的两个元素,大的就放到右边,第一次冒泡完最大的元素一定在序列的最右端。第一趟冒泡进行了N-1次比较,第二趟是N-2次,以此类推。。所以冒泡算法的时间复杂度是O(N^2)。

void bubbleSort(int a[])

{

   for(int i=0;i<a.length;i++)

       for(int j=i;j<a.length;j++)//我这样排序出问题啦,这样写代码默认每一趟排序最小的在最左边,显然不是。

           if(a[j]>a[j+1])

               swap(a[j],a[j+1]);

}

 

冒泡排序只能保证每一次排序最大的在最右边。因此需要修改代码。

 

void bubbleSort(int a[])

 

{

 

   for(int i=a.length-1;i>1;i--)

 

       for(int j=0;j<i;j++)//无论何时,看到一个循环嵌套在另外一个循环中时,时间复杂度均为N^2级

 

           if(a[j]>a[j+1])

 

               swap(a[j],a[j+1]);

}

选择排序

选择排序(选最小的来比较)是改进了的冒泡排序,它将交换次数从N的平方降到了N,但是不幸的是比较次数仍然为N的平方。

选择排序和冒泡排序很类似,只是每一趟排序,不再是相邻的两个数比较,而是和上一趟的最小数比较,小的又被设置为比较的基准。所以交换次数是N。

代码如下:

void public selectionSort(int a[])

{  

    for(int i=0;i<a.length;i++)

       {

        min=a[i];

        for(int j=i;j<a.length;j++)

           if(a[j]<min)//每次比较的都是上一次的最小

          min=a[j];

         swap(a[i],min);

        }

}

插入排序

插入排序是本章中所有排序中最快的一种排序方式,但是比较麻烦。该排序算法的前提是局部有序

 

---恢复内容结束---

第三章  简单排序

这一章将介绍三种基础的排序算法,冒泡,选择,插入排序。这三种排序的所有操作归结起来就是两步:比较和交换

冒泡排序

永远只比较相邻的两个元素,大的就放到右边,第一次冒泡完最大的元素一定在序列的最右端。第一趟冒泡进行了N-1次比较,第二趟是N-2次,以此类推。。所以冒泡算法的时间复杂度是O(N^2)。

void bubbleSort(int a[])

{

   for(int i=0;i<a.length;i++)

       for(int j=i;j<a.length;j++)//我这样排序出问题啦,这样写代码默认每一趟排序最小的在最左边,显然不是。

           if(a[j]>a[j+1])

               swap(a[j],a[j+1]);

}

 

冒泡排序只能保证每一次排序最大的在最右边。因此需要修改代码。

 

void bubbleSort(int a[])

 

{

 

   for(int i=a.length-1;i>1;i--)

 

       for(int j=0;j<i;j++)//无论何时,看到一个循环嵌套在另外一个循环中时,时间复杂度均为N^2级

 

           if(a[j]>a[j+1])

 

               swap(a[j],a[j+1]);

}

选择排序

选择排序(选最小的来比较)是改进了的冒泡排序,它将交换次数从N的平方降到了N,但是不幸的是比较次数仍然为N的平方。

选择排序和冒泡排序很类似,只是每一趟排序,不再是相邻的两个数比较,而是和上一趟的最小数比较,小的又被设置为比较的基准。所以交换次数是N。

代码如下:

void public selectionSort(int a[])

{  

    for(int i=0;i<a.length;i++)

       {

        min=a[i];

        for(int j=i;j<a.length;j++)

           if(a[j]<min)//每次比较的都是上一次的最小

          min=a[j];

         swap(a[i],min);

        }

}

插入排序

插入排序是本章中所有排序中最快的一种排序方式,但是比较麻烦。该排序算法的前提是局部有序

 

---恢复内容开始---

第三章  简单排序

这一章将介绍三种基础的排序算法,冒泡,选择,插入排序。这三种排序的所有操作归结起来就是两步:比较和交换

冒泡排序

永远只比较相邻的两个元素,大的就放到右边,第一次冒泡完最大的元素一定在序列的最右端。第一趟冒泡进行了N-1次比较,第二趟是N-2次,以此类推。。所以冒泡算法的时间复杂度是O(N^2)。

void bubbleSort(int a[])

{

   for(int i=0;i<a.length;i++)

       for(int j=i;j<a.length;j++)//我这样排序出问题啦,这样写代码默认每一趟排序最小的在最左边,显然不是。

           if(a[j]>a[j+1])

               swap(a[j],a[j+1]);

}

 

冒泡排序只能保证每一次排序最大的在最右边。因此需要修改代码。

 

void bubbleSort(int a[])

 

{

 

   for(int i=a.length-1;i>1;i--)

 

       for(int j=0;j<i;j++)//无论何时,看到一个循环嵌套在另外一个循环中时,时间复杂度均为N^2级

 

           if(a[j]>a[j+1])

 

               swap(a[j],a[j+1]);

}

选择排序

选择排序(选最小的来比较)是改进了的冒泡排序,它将交换次数从N的平方降到了N,但是不幸的是比较次数仍然为N的平方。

选择排序和冒泡排序很类似,只是每一趟排序,不再是相邻的两个数比较,而是和上一趟的最小数比较,小的又被设置为比较的基准。所以交换次数是N。

代码如下:

void public selectionSort(int a[])

{  

    for(int i=0;i<a.length;i++)

       {

        min=a[i];

        for(int j=i;j<a.length;j++)

           if(a[j]<min)//每次比较的都是上一次的最小

          min=a[j];

         swap(a[i],min);

        }

}

插入排序

插入排序是本章中所有排序中最快的一种排序方式,但是比较麻烦。该排序算法的前提是局部有序

 

---恢复内容结束---

第三章  简单排序

这一章将介绍三种基础的排序算法,冒泡,选择,插入排序。这三种排序的所有操作归结起来就是两步:比较和交换

冒泡排序

永远只比较相邻的两个元素,大的就放到右边,第一次冒泡完最大的元素一定在序列的最右端。第一趟冒泡进行了N-1次比较,第二趟是N-2次,以此类推。。所以冒泡算法的时间复杂度是O(N^2)。

void bubbleSort(int a[])

{

   for(int i=0;i<a.length;i++)

       for(int j=i;j<a.length;j++)//我这样排序出问题啦,这样写代码默认每一趟排序最小的在最左边,显然不是。

           if(a[j]>a[j+1])

               swap(a[j],a[j+1]);

}

 

冒泡排序只能保证每一次排序最大的在最右边。因此需要修改代码。

 

void bubbleSort(int a[])

 

{

 

   for(int i=a.length-1;i>1;i--)

 

       for(int j=0;j<i;j++)//无论何时,看到一个循环嵌套在另外一个循环中时,时间复杂度均为N^2级

 

           if(a[j]>a[j+1])

 

               swap(a[j],a[j+1]);

}

选择排序

选择排序(选最小的来比较)是改进了的冒泡排序,它将交换次数从N的平方降到了N,但是不幸的是比较次数仍然为N的平方。

选择排序和冒泡排序很类似,只是每一趟排序,不再是相邻的两个数比较,而是和上一趟的最小数比较,小的又被设置为比较的基准。所以交换次数是N。

代码如下:

void public selectionSort(int a[])

{  

    for(int i=0;i<a.length;i++)

       {

        min=a[i];

        for(int j=i;j<a.length;j++)

           if(a[j]<min)//每次比较的都是上一次的最小

          min=a[j];

         swap(a[i],min);

        }

}

插入排序

插入排序是本章中所有排序中最快的一种排序方式,但是比较麻烦。该排序算法的前提是局部有序

 

转载于:https://www.cnblogs.com/maowuyu-xb/p/6430041.html

你可能感兴趣的文章
ERROR 2002 (HY000): Can't connect to local MySQL解决方法
查看>>
骗子借新浪微博三周年活动为名诈骗
查看>>
删除用户命令userdel不加-r参数会怎样
查看>>
打开eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素。...
查看>>
关于Map集合的遍历总结
查看>>
Android开发学习—— Broadcast广播接收者
查看>>
根据起始日,结束日获取之间所有日期信息
查看>>
android--UI相关常用类简介
查看>>
Python第一天 - set
查看>>
request.getSession(true/false)的区别
查看>>
echarts 缩放屏幕 resize 多图表功能
查看>>
JS实现局部打印和预览【转】
查看>>
kubernetes 1.14安装部署dashboard
查看>>
Clash Royale开发日志
查看>>
微软邮件系统Exchange 2013系列(九)配置Exchange OWA
查看>>
oracle 关于“ORA-30036”处理方法
查看>>
“终端服务器超出了最大允许连接数”的常用解决方法(非软件)
查看>>
服务器无法与DeviceNetBT_Tcpip_{670E1543-79C1-485C-9B4B-835CE3BA37B3}传输相绑定
查看>>
我的友情链接
查看>>
在VMM2012R2中使用二代虚拟机创建的模板无法创建虚拟机的解决方法
查看>>