一、冒泡排序算法
思路:
1.从第一个元素开始,比较相邻的两个元素,如果第一个比第二个大,则进行交换。
2.轮到下一组相邻元素,执行同样的比较操作,再找下一组,直到没有相邻元素可比较为止,此时最后的元素应是最大的数。
3.除去每次得到的最后一个元素,剩余的元素继续重复上述步骤,直到没有元素比较为止。
代码如下:
public static void bubbleSort(int[] nums) {
if(null == nums) {
return;
}
for(int i=0;i<nums.length-1;i++) {
for(int j=0;j<nums.length-i-1;j++) {
if(nums[j]>nums[j+1]) {
int t=nums[j];
nums[j]=nums[j+1];
nums[j+1]=t;
}
}
}
for(int i=0;i<nums.length;i++) {
System.err.print(nums[i]+",");
}
}
这种排序算法我们可以进一步改进,提高排序效率,在进行相邻元素比较中,如果整轮没有元素交换,那么就直接结束,代表已经排好了序。
冒泡改良版:
public static void improveBubbleSort(int[] nums) {
if(null == nums) {
return;
}
int n=1;
while(n>0) {
int pos=0;
for(int j=0;j<nums.length-1;j++) {
if(nums[j]>nums[j+1]) {
pos=j+1;
int t=nums[j];
nums[j]=nums[j+1];
nums[j+1]=t;
}
}
n=pos;
}
for(int i=0;i<nums.length;i++) {
System.err.print(nums[i]+",");
}
}
二、插入排序
思路:
插入排序基本思想是将一个元素插入到已经排好序的有序表中,使得被插入数的序列同样是有序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程。
实现如下:
public static void insertSort(int[] nums) {
if(null == nums) {
return;
}
for(int i=1;i<nums.length;i++) {
int x=nums[i];
int j;
for(j=i;j>0 && x<nums[j-1];j--) {
nums[j]=nums[j-1];
}
nums[j]=x;
}
for(int i=0;i<nums.length;i++) {
System.err.print(nums[i]+",");
}
}
三、选择排序
思路:
选择排序是一种简单直观的排序算法,首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
算法如下:
public static void selectSort(int[] nums) {
if(null == nums) {
return;
}
for(int i=0;i<nums.length-1;i++) {
int index=i;
for(int j=i+1;j<nums.length;j++) {
if(nums[j]<nums[index]) {
index=j;
}
}
if(index!=i) {
int t=nums[i];
nums[i]=nums[index];
nums[index]=t;
}
}
for(int i=0;i<nums.length;i++) {
System.err.print(nums[i]+",");
}
}
这三种是比较常用的排序算法。