码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法原理及实现

时间:2016-12-17 22:40:12      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:turn   dex   odi   bsp   return   代码   font   最大值   bubble   

算法一:直接插入排序

算法实现原理:就是计算一个新元素是应该放在哪里?每次进来一个都会进行和原来顺序进行重新组合。

代码实现:Java

public int[] testInsertionSort(int[] data){
// this methord is very easy.
for(int i = 1;i < data.length;i++){
int temp = data[i];
int j =i;
while(j>0 && data[j-1]>temp){
data[j] = data[j-1];
j--;
}
data[j] = temp;
}
return data;

}

算法二:希尔排序

算法原理:就是使用不同的长度进行排序,这只是在直接插入排序的基础上做了一些改进。

代码实现:Java

public int[] testInsertionShell(int[] data){
int length = data.length;
for(int d = length/2;d > 0;d/=2){
for(int i = d; i < length;i++){
int temp = data[i];
int j = i;
while( j >= d && data[j-d] > temp){
data[j] = data[j-d];
j -= d;
}
data[j] = temp;
}
}
return data;
}


算法三:选择排序
算法原理:每进行一次排序,找出最小值放在开始位置,依次进行。
代码实现:Java
public int[] testSelectSort(int[] data){
int length = data.length;
for(int i = 0;i < length-1; i++){
int j = i;
for(int k = i+1;k<length;k++){
if(data[k]<data[j]){
j = k;
}

}
if(j != i){
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}

}

return data;
}


算法四:改进的选择排序
算法实现原理:在一次的排序过程中找到最大值和最少值。
代码实现:Java
public int[] testModifiedSelectSort(int[] data){
int length = data.length;
for(int i = 0; i < length/2;i++){
int maxIndex = length-i-1;
int minIndex = i;
for(int k= i+1; k < length;k++ ){
if(data[k]<data[minIndex]){
minIndex = k;
}
}
if(minIndex !=i){
int temp = data[minIndex];
data[minIndex] = data[i];
data[i] = temp;
}
for(int m = length-i-2;m>i;m--){
if(data[m]>data[maxIndex]){
maxIndex = m;
}
}
if(maxIndex !=length-i-1){
int temp = data[maxIndex];
data[maxIndex] = data[length-1-i];
data[length-1-i] = temp;
}

}
return data;
}


算法五:冒泡排序
算法实现原理:每进行一次排序,就可以得到一个最大值。
代码实现:
public int[] testBubbleSort(int[] data){
int length = data.length;
for(int i = 0; i < length-1;i++){
for(int j = 0;j < length-i-1;j++){
if( data[j] > data[j+1]){
int temp = data[j+1];
data[j+1] = data[j];
data[j] = temp;
}
}
}
return data;

}


算法六:快速排序
算法原理:使用一分为二的排序方式。
代码实现:
public int[] testQuickSort(int[] data,int left,int right){

if(left < right){
int i = left;
int j = right;
int x = data[i];
while(i < j){
while( i<j && data[j] > x){
j--;
}
if(i < j){
data[i++] = data[j];
}
while (i < j && data[i] < x){
i++;
}
if(i < j){
data[j--] = data[i];
}
}
data[i] = x;
testQuickSort(data,left,i-1);
testQuickSort(data,i+1,right);

}
return data;


}

算法七:堆排序
算法原理:就是构建堆,不断的将排好序的根节点和叶子节点进行交换,进行不断的调整堆。
代码实现:
public void buildHeapSort(int[] data, int root, int length) {
int lChild = root * 2 + 1;
if (lChild < length) {
int largest = lChild;
int rChild = lChild + 1;
if (rChild < length) {
if (data[lChild] < data[rChild]) {
largest = rChild;
}
if (data[root] < data[largest]) {
int temp = data[largest];
data[largest] = data[root];
data[root] = temp;
buildHeapSort(data, largest, length);
}
}
}

}

public int[] heapSort(int[] data) {
int length = data.length;
for (int root = length / 2 - 1; root >= 0; root--) {
buildHeapSort(data, root, length);
}
for (int i = length - 1; i >= 2; i--) {
int temp = data[0];
data[0] = data[i];
data[i] = temp;
buildHeapSort(data, 0, --length);
}
return data;
}
 



排序算法原理及实现

标签:turn   dex   odi   bsp   return   代码   font   最大值   bubble   

原文地址:http://www.cnblogs.com/angel1314/p/6193034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!