【Java_Base】常用排序算法:冒泡排序、选择排序、插入排序

冒泡排序
比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

选择排序
对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。
插入排序
从数组的第一个元素a[0]开始,将其后一个元素a[1]插入到a[0]的前面或者后面,接着继续这一过程。每次都是将a[i]插入到已经排序好的a[0]~a[i-1]中合适的位置

 1 public class Sort{
 2     public static void main(String[] args){
 3         int array[]={12,76,34,66,44,23,88,77,56,99};
 4         System.out.println("待排序数组为:");
 5         for(int arr:array){
 6             System.out.print(arr+" ");
 7         }
 8
 9         //冒泡排序
10         System.out.println("\n"+"冒泡排序(从大到小):");
11         bubbleSort(array);
12         //选择排序
13         System.out.println("\n"+"选择排序(从小到大):");
14         selectionSort(array);
15         //选择排序
16         System.out.println("\n"+"插入排序(从小到大):");
17         insertSort(array);
18     }
19     //冒泡排序
20     public static void bubbleSort(int[] a){
21         int n=a.length;
22         //i是比较的次数,共比较n-1次
23         for(int i=1;i<n;i++){
24             //j是进行比较的第一个元素的下标
25             for(int j=0;j<n-1;j++){
26                 if(a[j]<a[j+1]){
27                     int temp=a[j+1];
28                     a[j+1]=a[j];
29                     a[j]=temp;
30                 }
31             }
32         }
33         //遍历已排序数组
34         for(int k=0;k<n;k++){
35             System.out.print(a[k]+" ");
36         }
37     }
38     //选择排序
39     public static void selectionSort(int[] a){
40         int n=a.length;
41         //i是要交换值得下标,
42         for(int i=0;i<n-1;i++){
43             //k记录当前最小值的下标
44             int k=i;
45             //从k+1的位置开始寻找最小值的位置
46             for(int j=k+1;j<n;j++){
47                 //从小到大
48                 if(a[j]<a[k]){
49                     k=j;
50                 }
51             }
52             //如果k不是第一个元素的下标,就让第一个元素跟他交换一下值
53             if(i!=k){
54                 int temp=a[i];
55                 a[i]=a[k];
56                 a[k]=temp;
57             }
58         }
59         //遍历已排序数组
60         for(int k=0;k<n;k++){
61             System.out.print(a[k]+" ");
62         }
63     }
64     //插入排序
65     public static void insertSort(int[] a){
66         int n=a.length;
67         //i是待插入位置的下标
68         for(int i=1;i<n;i++){
69             for(int j=i;j>0;j--){
70                 //从小到大排序
71                 if(a[j]<a[j-1]){
72                     int temp=a[j-1];
73                     a[j-1]=a[j];
74                     a[j]=temp;
75                 }
76             }
77         }
78         //遍历已排序数组
79         for(int k=0;k<n;k++){
80             System.out.print(a[k]+" ");
81         }
82     }
83 }

时间: 2024-10-13 07:08:49

【Java_Base】常用排序算法:冒泡排序、选择排序、插入排序的相关文章

简单排序算法 冒泡排序 选择排序 插入排序

冒泡排序: 总体思路:对未排序的各个元素,依次比较两个元素,如果这两个元素为逆序(与想要的顺序相反),则交换这两个元素. 这样可以有两种排序的思路: 思路一: 固定位置排序:比如有一个未排序队列,下标依次为0,1,2,.....N-1, 第一轮排序:首先固定位置0,将下标为0的元素依次和下标为1.下标为2.....下标为N-1的元素相比较,若相比较的两个元素为逆序,则交换这两个元素,这样第一轮排序完之后,位置为0的元素,就是最大的(最小的). 第二轮排序:首先固定位置1,将下标为1的元素依次和下

初级排序算法之选择排序

初级排序算法 本质是对要排序的数组进行嵌套循环,内层循环负责局部的排序,外层循环负责剩余的无序元素的递减.所以你只要理解嵌套循环和比较大小就能很快的掌握初级排序算法. 选择排序 一个无序的数组 a = [0, 4, 6, 3, 8, 2, 3, 9], 你也可以把a的元素想象成任何现实中可比较的具体物体.例如,有10根长短不一的木条,我们如何对它们进行排序?一个最直接的思想,先拿出最短的放到最前面,在剩余的木条中再拿出最短的放在第二位...直到最后一根木条.从中我们可以看出,1. 我们需要再一次

数据结构排序算法之选择排序

今天继续介绍一种排序算法:选择排序. 选择排序的基本思想就是从待排序列中选择出最小的,然后将被选出元素和序列的第一个元素互换位置(当前默认是升序排列),则互换完成后第一个元素就是整个序列的最小的元素,则一次选择排序结束.然后我们从剩下的子序列中选择出最小的,然后将该被选出来的元素和该子序列的第一个元素(即整个序列的第二个元素)互换位置,则当前整个序列的第二个元素就是当前序列中的次最小值,第二次选择排序结束.以此类推,直到该待排序列只剩下一个元素后,则整个序列有序. 具体过程如下图所示: 下面就不

排序算法之选择排序

一. 算法描述 选择排序:在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成. 二. 算法分析 平均时间复杂度:O(n2) 空间复杂度:O(1)  (用于交换和记录索引) 稳定性:不稳定 (比如序列[5, 5, 3]第一趟就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面) 三. 算法实现

经典排序:冒泡排序+选择排序 小结

经典排序:冒泡排序+选择排序 例 FJUTOJ 1842 冒泡排序 原理是取相邻两个数进行大小比较,判断是否交换. 以从小到大排序为例,冒泡排序就像气泡一样,最小的数慢慢浮上来,最大的数慢慢沉下去.那么完整从头到尾做一次之后最后一位就是原序列中最大的数字了.然后只需要对1~(n-1)个数字进行排序,完成后倒数第二个数字也为原序列的1~n-1元素中最大的值.如此重复,进行n-1次一定能完成排序.参考代码: 1 #include <stdio.h> 2 void BubbleSort(int *,

【排序算法】选择排序(Selection sort)

0. 说明 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对 n 个元素的表进行排序总共进行至多 n-1 次交换.在所有的完全依

【排序算法】选择排序

选择排序算法原理 选择排序算法时间复杂度分析 选择排序算法稳定性分析 选择排序算法C语言代码 #include <stdio.h> //交换两个元素的值 void swap(int* a, int* b) { int temp; temp = *a; *a = *b; *b = temp; } void selectionSort(int arr[], int length) { int i, j, maxIndex; for(i = length; i > 0; i--) { //假设

排序算法总结------选择排序 ---javascript描述

每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此恶补排序算法. 一.基本排序算法:基本排序算法有冒泡排序,选择排序,插入排序. 选择排序算法思想:选择排序从数组的头开始,将第一个元素与其他元素进行比较,找到最小的元素,然后放到数组的第一个位置.然后再从第二个元素开始找比他小的元素,放到第二个位置,以此类推,重复上述步骤,当进行到数组的第二个位置时

选择排序算法---直接选择排序和堆排序

本文主要是解析选择排序算法:直接选择排序和堆排序. 一.直接选择排序   基本思想:       选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终

[排序算法二]选择排序

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾.以此类推,直到全部待排序的数据元素的个数为零.选择排序是不稳定的排序方法. 算法性能 时间复杂度:O(n^2),总循环次数 n(n-1)/2.数据交换次数 O(n),这点上来说比冒泡排序要好,因为冒泡是把数据一位一位的移上来,而选择排序只需要在子循环结束后移动一次