选择排序
选择排序也是一种简单的排序方法。它的基本思想是:第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1]~arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2]~arr[n-1]中选取最小值,与arr[2]交换,…,第i次从arr[i-1]~arr[n-1]中选取最小值,与arr[i-1]交换,…, 第n-1次从arr[n-2]~arr[n-1]中选取最小值,与arr[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。
private void arrSort(int[]arr) {
int temp=0;
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if (arr[i]>arr[j]) {
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
对于十万个数据有
插入排序
插入排序的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
private void insertSort(int[] arr) {
// TODO Auto-generated method stub
int insertValue;
int insertIndex;
for (int i = 1; i < arr.length; i++) {
insertValue=arr[i];
insertIndex=i-1;
while (insertIndex>=0&&insertValue<arr[insertIndex]) {
arr[insertIndex+1]=arr[insertIndex];
insertIndex--;
}
if (insertIndex+1!=i) {
arr[insertIndex+1]=insertValue;
}
}
}
如果待插入的数是最小的就需要对它之前所有的数进行向后移位
对于十万个数据有
经测试,插入排序比选择排序效率高很多
希尔排序
希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。
希尔排序法基本思想:
希尔排序是把记录按下标的一定步长分组,对每组使用直接插入排序算法排序;随着步长逐渐减少,每组包含的数越来越多,当步长减为1时,整个数组恰被分成一组,此时就完成了排序
private void shellSort(int[] arr) {
// TODO Auto-generated method stub
int i,j,inc,key;
for (inc = arr.length/2; inc>0; inc/=2) {
// 每一趟进行排序
for (i = inc; i < arr.length; i++) {
// 记录下需要插入的数
key=arr[i];
// 插入排序:对每一个需要插入的数,在该组循环中,如果小于arr[j-inc]并且未插入完全,把这个数之后的数全部向后移一位
for (j = i; j >=inc&&key<arr[j-inc]; j-=inc) {
arr[j]=arr[j-inc];
}
arr[j]=key;
}
print_arr(arr);
}
}