您的位置:首页 > 理论基础 > 数据结构算法

数据结构01之简单排序

2012-03-30 15:56 232 查看
数据结构和一些常用算法最简单和最常用的当然是查找和排序!

查找最常用的有线性查找、和二分查找都比较简单!

线性查找顾名思义就是以线性的方式挨着找!哈哈!说的有点过!不过就是这意思!

二分查找就是从中间分开!然后比较看看离那边近!然后再分、再比较、再分··直到找到!

得! 直奔主题!关于简单排序有:

冒泡排序

选择排序

插入排序

冒泡排序

冒泡排序相对比较简单,就是当满足条件后就两两互换!当换完一轮后至少会确定一个最大值或者最小值、然后有多少个元素换多少次不是局都排好序了吗!

当然毋庸置疑的它没什么效率,但是思想比较简单!比较适合入门!

public void bubbleSort(){
int[] arr = {0,3,5,2,4,7,9,1,6,8};

int k;

for(int j=0;j<arr.length-1;j++){//可以把这层循环注掉看看只执行一次后什么样,因为最后一次不用执行所以减1

for(int i=0;i<arr.length-j-1;i++){//执行循环一次派出一个最大的,并且在下一次中少执行一次,所以减j

if(arr[i]>arr[i+1]){

k = arr[i];

arr[i] = arr[i+1];

arr[i+1] = k;

}

}

}
showArray(arr);

}

选择排序

选择排序是把所有元素扫描一遍挑出最大或者最小,进行交换!

选择排序必冒泡的优点是减少了交换次数,但是很不幸判断次数保持不变!See It!

public void chooseSort(){ int[] arr = {0,3,5,2,4,7,9,1,6,8};
int temp,min;
for(int j=0;j<arr.length;j++){
min = j;
for(int i=j+1;i<arr.length;i++){//只选出一个最小的来
if(arr[i]<arr[min])
min = i;
}
//做一次交换
temp = arr[j];
arr[j] = arr[min];
arr[min] = temp;
}
showArray(arr);
}

插入排序

直接插入排序(Straight Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程

算法效率要比前两个都高

public void insertSort(){
int[] arr = {0,3,5,2,4,7,9,1,6,8};
int temp;
for(int j=1;j<arr.length;j++){
temp = arr[j];
int i = j;
while(i>0 && arr[i-1] >= temp){
arr[i] = arr[i-1];
i--;
}
arr[i] = temp;
}
showArray(arr); } 只有前一个比后一个大的时候才进入while,然后依次跟之前排序的所有元素比较选择合适的位置,这个条件就注定了不会做多余的判断,因为只要不比前面的大他的条件就为假就不判断不交换了!所以极大的减少了判断和交换次数!因为之前的元素都是有序的只要前面一个不比他大,那么再往前就没有必要比了!,所以经典的是while里面的判断,决定要不要交换!

整个类的代码:

public class SimpleSort {

/**
* @param args
*/
public static void main(String[] args) {
new SimpleSort().insertSort();
}

public void bubbleSort(){
int[] arr = {0,3,5,2,4,7,9,1,6,8};
int k;
for(int j=0;j<arr.length-1;j++){//可以把这层循环注掉看看只执行一次后什么样
for(int i=0;i<arr.length-1-j;i++){//执行循环一次派出一个最大的
if(arr[i]>arr[i+1]){
k = arr[i];
arr[i] = arr[i+1];
arr[i+1] = k;
}
}
}
showArray(arr);
}

public void chooseSort(){
int[] arr = {0,3,5,2,4,7,9,1,6,8};
int temp,min;
for(int j=0;j<arr.length;j++){
min = j;
for(int i=j+1;i<arr.length;i++){//只选出一个最小的来
if(arr[i]<arr[min])
min = i;
}
//做一次交换
temp = arr[j];
arr[j] = arr[min];
arr[min] = temp;
}
showArray(arr);
}

public void insertSort(){
int[] arr = {0,3,5,2,4,7,9,1,6,8};
int temp;
for(int j=1;j<arr.length;j++){
temp = arr[j];
int i = j;
while(i>0 && arr[i-1] >= temp){
arr[i] = arr[i-1];
i--;
}
arr[i] = temp;
}
showArray(arr);
}

public void showArray(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: