java基础之几种常见的排序算法

一,冒泡排序

1、原理:

  从数组的第一个位置开始两两比较array[index]和array[index+1],如果array[index]大于array[index+1]则交换array[index]和array[index+1]的位置,止到数组结    束;

  • 从数组的第一个位置开始,重复上面的动作,止到数组长度减一个位置结束;
  • 从数组的第一个位置开始,重复上面的动作,止到数组长度减二个位置结束;
  • .......

2、 时间复杂度:O(N2),进行了(n-1)*(n-2)....=n*(n-1)/2次比较和约比较次数一半的交换次数(均况下),那么根据大O表示法时间复杂度为O(N^2)

3、代码

    int x[]={7,1,2,3,4,5,4,3};
    int y;
    for (int i = 0; i < x.length; i++) {
        for (int j = 0; j < x.length-i-1; j++) {
            if (x[j]>x[j+1]) {
                y=x[j+1];
                x[j+1]=x[j];
                x[j]=y;
            }
        }
        System.out.println(x[i]);
    }

二、选择排序

1、原理:选择一个值array[0]作为标杆,然后循环找到除这个值外最小的值(查找小于标杆的最小值),交换这两个值,这时最小值就被放到了array[0]上,然后再将array[1]作为标杆,从剩下未排序的值中找到最小值,并交换这两个值。

2、时间复杂度:O(N^2),与冒泡排序相比减少了数组交换的次数

3、代码、

//选择排序
        int x[] ={7,2,2,1,4,8,9,2,4};
        for (int i = 0; i < x.length; i++) {
            int min=i;
            for (int j = i+1; j < x.length; j++) {
                if(x[j]<x[min]){
                    min=j;//把最小的值放在最第一个然后依次
                }
            }
            if(min != i){
                int temp = x[min];
                x[min]=x[i];
                x[i]=temp;
            }
    }
        for (int i = 0; i < x.length; i++) {
            System.out.println(x[i]);
        }

三,插入排序

1、原理:插入排序的思想是数组是部分有序的,然后将无序的部分循环插入到已有序的序列中

    

    第一次循环是第二个元素和第一个元素比较

   第二次循环是第三个和第二个比较,如果比第二个小,再和第一个比较

如图:(从数据结构与算法中摘得)

2、时间复杂度:插入排序对随即顺序的序列的时间复杂度也为O(N^2),但是对于基本有序的序列进行排序时间复杂度为O(N)

3、代码

int x[] ={3,4,5,1,2,3,7,8,9};
             for (int i = 1; i < x.length; i++) {
                int temp = x[i];
                int j =i-1;
                while (j>=0 && x[j]>temp) {
                    x[j+1]=x[j];//依次和前面的进行比较
                    j--;
                }
                x[j+1] = temp;
            }
        for (int i = 0; i < x.length; i++) {
            System.out.println(x[i]);
        }
时间: 2024-10-06 22:25:59

java基础之几种常见的排序算法的相关文章

java几种常见的排序算法总结

[java] view plain copy /*************几种常见的排序算法总结***************************/ package paixu; public class PaiXu { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:"); for(int i=0;i<20;i++){ num[i]=(int)(Math.random()*100)

几种常见的排序算法

1.插入类排序 在一个已经有序的序列中,插入一个新的记录.有直接插入排序.折半插入排序.希尔排序. 插入类排序 直接插入排序 1 void InsertSort(int R[], int n) 2 { 3 int i, j; 4 int temp; 5 for (i = 1; i < n; ++i) 6 { 7 temp = R[i]; 8 j = i - 1; 9 while (j >= 0 && temp < R[j]) 10 { 11 R[j+1] = R[j];

Python全栈开发之5、几种常见的排序算法以及collections模块提供的数据结构

在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习,说不定以后哪天面试正好用上,文章后半段则介绍一下collections模块,因为这个模块相对于python提供的基本数据结构(list,tuple,dict)不被人们所熟悉,但是如果你对他们了解的话,用起来也是非常方便高效的. 排序算法 一.冒泡排序(BubbleSort) 步骤: 比较相邻的元素,如果第一个比第二个大,就交换他们两个. 循环一遍后,最大的数就“浮”到了列表最后的位置. 将剩下的数再次

几种常见的排序算法分析学习

目录(?)[-] 冒泡排序 选择排序 1 直接插入排序 1 二分查找插入排序 希尔入排序 快速排序 归并排序 总结 本篇博客知识点 分别描述了 冒泡,选择,直接插入,二分插入,希尔,快速以及归并排序.同时还有Java实现代码,算法分析和示意图 冒泡排序 算法描述 设待排序记录序列中的记录个数为n 一般地,第i趟起泡排序从1到n-i+1 依次比较相邻两个记录的关键字,如果发生逆序,则交换之. 其结果是这n-i+1个记录中,关键字最大的记录被交换到第n-i+1的位置上,最多作n-1趟. 算法实例 经

七种常见经典排序算法总结(C++)

最近想复习下C++,很久没怎么用了,毕业时的一些经典排序算法也忘差不多了,所以刚好一起再学习一遍. 除了冒泡.插入.选择这几个复杂度O(n^2)的基本排序算法,希尔.归并.快速.堆排序,多多少少还有些晦涩难懂,幸好又博客园大神dreamcatcher-cx都总结成了图解,一步步很详细,十分感谢. 而且就时间复杂度来说,这几种算法到底有什么区别呢,刚好做了下测试. 代码参考: http://yansu.org/2015/09/07/sort-algorithms.html //: basic_so

用Java实现几种常见的排序算法

用Java语言实现的各种排序,包括插入排序.冒泡排序.选择排序.Shell排序.快速排序.归并排序.堆排序.SortUtil等. 插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treeroot * @since 2006-2-2 * @version 1.0 */ public class InsertSort implements SortU

几种常见的排序算法Java实现总结

public class MySort { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:"); for(int i=0;i<20;i++){ num[i]=(int)(Math.random()*100); System.out.print(num[i]+" "); } System.out.println(); } int num2[]=new int[MAX]

几种常见的排序算法总结

*****选择排序***** 方法描述:首先找到第一个最小的数,和第一个数交换:然后从剩下的找出最小的与第二个交换,以此类推.效率: 长度为N的数组,大约N2/2比较,N次交换特点: 1.运行时间和输入无关,有序数组,全部相等的数组,随机数组所用时间一样,没有充分利用输入的初始状态. 2.数据移动最少,与输入成线性关系.代码: sort(int[] a){ int n = a.length; for(int i = 0; i < n; i++){ int min = i; for(int j =

几种常见简单排序算法

- 简单选择排序 循环遍历整个数组,每次遍历都是从当前待填充位置开始,找出未排序集合中的最小值,每次找到更小值都记录其值和位置信息,遍历完成后,将最小值与当前待填充点 进行交换.继续下一个位置,直到外循环到达数组尾. #include <iostream> using namespace std; int main() { int a[10]={23,11,6,33,14,99,23,2,14,20}; int smallest; int smallpos; for(int i=0;i<