三种简单排序算法(java实现)

一、冒泡排序

算法思想:遍历待排序的数组,每次遍历比较相邻的两个元素,如果他们的排列顺序错误就交换他们的位置,经过一趟排序后,最大的元素会浮置数组的末端。重复操                   作,直到排序完成。

示例演示:

算法实现:

1 for(int i=0;i<array.length-1;i++){//最多排序n-1次
2             for(int j=0;j<array.length-i-1;j++){//需要交换的次数
3                 if(array[j]>array[j+1]){
4                     int temp=array[j];
5                     array[j]=array[j+1];
6                     array[j+1]=temp;
7                 }
8             }
9         }

算法时间复杂度:O(n2)      外层循环需要比较n-1次,内层循环需要比较n次。

二、选择排序

算法思想:重待排序的数组中选择一个最小的元素,将它与数组的第一个位置的元素交换位置。然后从剩下的元素中选择一个最小的元素,将它与第二个位置的元素交换                 位置,如果最小元素就是该位置的元素,就将它和自身交换位置,依次类推,直到排序完成。

示例演示:

算法实现:

 1 for(int i=0;i<array.length;i++){
 2             int min=i;
 3             for(int j=i+1;j<array.length;j++){
 4                 if(array[j]<array[min]){
 5                     min=j;
 6                 }
 7             }
 8             int temp=array[min];
 9             array[min]=array[i];
10             array[i]=temp;
11         }

时间复杂度:O(n2)     需要n2 /2次比较和n次交换

三、插入排序

算法思想:从数组的第二个元素开始遍历,将该元素与前面的元素比较,如果该元素比前面的元素小,将该元素保存进临时变量中,依次将前面的元素后移,然后将该元                 素插入到合适的位置。每次排序完成后,索引左边的元素一定是有序的,但是还可以移动。对于倒置越少的数组,该算法的排序效率越高。

注:倒置: 5   3   6   2   倒置的项为  5-3  5-2  3-2  6-2

示例演示:

算法实现:

for(int i=1;i<array.length;i++){
            for(int j=i;j>0&&array[j]<array[j-1];j--){
                int temp=array[j];
                array[j]=array[j-1];
                array[j-1]=temp;
            }
        }

时间复杂度:O(n2)       最坏情况下n/2次比较,n/2交换    最好情况N-1次比较,0次交换

注:菜鸟一个,有不正确的地方欢迎指正。

时间: 2024-08-02 06:59:23

三种简单排序算法(java实现)的相关文章

算法:三种简单排序算法

排序算法比较常见的有:冒泡排序.简单选择排序.直接插入排序:希尔排序.堆排序.归并排序和快速排序算法等.今天先学习一下前面三种比较简单的算法.排序的相关概念: ①排序的稳定性:两个或多个元素相等,排序过后仍然是原来的顺序则为稳定排序. ②内部排序:排序过程都在内存中进行:外部排序:需要对外存进行访问的排序过程. ③内排序算法性能因素:1.时间性能,比较与移动:2.辅助空间:3.算法复杂性 实例:冒泡排序.简单选择排序与直接插入排序 #include "stdio.h" #define

算法复杂度,及三种主要排序算法的研究

一.时间复杂度 1.时间频度  T(n),n为问题的规模 即--算法中语句的执行次数.又叫语句频度. 2.时间复杂度 记作 O( f(n) ),这里的f(n)是一个T(n)的同数量级函数. 如O(1)表示算法的语句执行次数为一个常数,不随规模n的增长而增长: 又如T(n)=n^2+3n+4与T(n)=4n^2+2n+1它们的频度不同, 但时间复杂度相同,都为O(n^2). 3.算法的性能 主要用算法的 时间复杂度 的数量级来评价一个算法的时间性能. 二.空间复杂度 S(n),包括3方面: 1.算

面试中常常问的三种简单排序方法

/** * 三种简单的排序 * 本类中全部举例都是依照从小到大进行排序 * @author caohaicheng * @time 2014-07-24 */ public class SortDemo { //int[] score={7,10,35,21,78,2,1,9}; public static void main(String[] args) { SortDemo sd=new SortDemo(); System.out.println("********************

三种线性排序算法(计数、基数、桶排序)的简单实现

一.计数排序 计数排序假设n个输入元素中的每一个都是介于0到k之间的整数.此处k为某个整数(输入数据在一个小范围内). 基本思想: 计数排序的基本思想是对每一个输入元素x,确定出小于x的元素的个数.然后再将x直接放置在它在最终输出数组中的位置上. 如下图所示: 由于数组中可能有相等的数,在处理时需要注意. 时间复杂度和空间复杂度分析 算法总时间Θ(k + n).当k=O(n)时,计数排序的运行时间是Θ(n). 空间复杂度是O(n+k).需要两个辅助数组:存放排序结果的数组B[n],存放临时结果的

关于三种简单排序的操作

一.关于插入排序的一些想法与实现,插入排序的原理是在序列前增加一个哨兵,通过哨兵的值与前面比较,如果需要改变的话直接覆盖掉与哨兵值的位置,最后可以将哨兵填充到新的空缺位置,按照排序的定义意思就是直接在新的列表前直接补一个索引为0的位置填充一个零nums=[1,9,8,5,6,7,4,3,2]nums=[0]+numslength=len(nums)for i in range(2,length):nums[0]=nums[i]j=i-1if nums[j]>nums[0]:while nums[

几种简单排序算法

最简单的排序算法——冒泡排序: 1 void bubble_sort(int *arr, int len) 2 { 3 int up, down; 4 for(up = 0; up != len; ++ up) 5 { 6 for(down = 0; down != len - up - 1; ++ down) 7 { 8 if(arr[down] > arr[down + 1]) 9 swap(arr[down], arr[down + 1]); 10 } 11 } 12 } 还有一种思路,就

三种简单排序

1.冒泡排序 冒泡排序是一种简单的排序算法,其基本思想如下: 1)从第一个开始起,比较相邻的两个元素的大小,如果前一个比后一个大,则进行交换(也就是小的冒上去). 2)然后再和之前相邻元素进行比较,若小,则冒上去. 2)重复以上操作,直到最后一个元素. 1 public static void BubbleSort(long[] arr){ 2 long tmp = 0; 3 for(int i=0;i<arr.length-1;i++){ 4 for(int j=arr.length-1;j>

三种简单排序(之一)——(冒泡排序)

1.简介:     在学习技能的过程中,没有哪一种技术是最好的!在不同的情况下,不同的技术会有不同优势! 冒泡排序的基本思想是:每次比较两个相邻元素,如果它们的顺序错误就把它们交换位置: 下面通过图简单来看看“冒泡排序” 所谓冒泡排序就是这样,小的数往上浮,大的数往下沉! 2.冒泡排序: 代码: 1 static void Main(string[] args) 2 { 3 int[] arr = { 1, 5, 2, 7, 3 }; 4 foreach (int item in bubble(

三种基础排序算法总结

一.冒泡排序 1.算法思想: 1).两层循环,外层循环i从0开始,内层循环从j=i+1开始2).如果ary[i] < ary[j],则交换其值3).直到外层循环到length-1 2.主算法实现 public static void bubbleSort(int[] ary){ int length = ary.length; //每完成一轮外层循环,ary[i]的次序在全局确定 for (int i = 0; i < length; i++) { //内层循环向后扫描,且立即交换. for