1、线性查找
/**
* 线性查找
*/
public void linearSearch(int value){
for (int i = 0; i < arraySize; i++) {
if(value == array[i]){
System.out.print("Found a value at: "+i);
}
}
}
2、二分法查找,需要先对数组进行排序后,再进行二分法查找
public void binarySearchForValue(int searchNum){
bubbleSort();
printArray();
int lowIndex = 0;
int highIndex = arraySize - 1;
while(lowIndex <= highIndex){
int middleIndex = (lowIndex + highIndex) / 2;
if( searchNum > array[middleIndex]){
lowIndex = middleIndex+1;
}
else if(searchNum < array[middleIndex]){
highIndex = middleIndex-1;
}
else{
System.out.println("Found a searchNum "+middleIndex);
lowIndex = middleIndex+1;
}
}
}
3、冒泡排序,首先要确定一个目标,然后再两两比较,向设立的目标位置进行移动
public void bubbleSort(){
for (int i=arraySize-1; i>=0 ;i--){
for (int j=i; j
swap(j,j+1);
}
}
}
}
4、冒泡排序2
public void bubbleSort2(){
int count = 0;
for (int i = arraySize-1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if(array[j] > array[j+1]){
swap(j,j+1);
}
count++;
}
}
System.out.println("执行次数为: "+count);
}
5、选择排序 首先假设当前位置i为最小值,i代表当前需要处理的位置,然后进行比较,找到array[minmum] >array[j]的值,并记录下来,再一轮比较后获得最小的值的坐标,再把这个下标的值跟当前处理位置i进行交换。
public void selectSort(){
for (int i = 0; i < arraySize; i++) {
int minmum = i;
for (int j = i; j < arraySize; j++) {
if(array[minmum] > array[j]){
minmum = j;
}
}
swap(i,minmum);
}
}
6、插入排序 假设左边的数组是已经全部排序好的数组,因为i=0是已经排序好的,因为只有一个数字,所以序号从i=1开始,记录下当前的用于比较的key,比较前面一个数是不是比key大,如果是则array[j-1] 的值移动到array[j]。到最后,将key填入挖出来的位置也就是j。
/**
* insertSort
*/
public void insertSort(){
for (int i = 1; i < arraySize; i++) {
int j = i;//currentIndex
int key = array[j];
while ((j > 0) && (array[j-1] > key)){
array[j] = array[j-1];
j--;
}
array[j] = key;
}
}
7、shell排序(希尔排序)
public class ShellSort {
public void shell_sort(int[] arr) {
int arraySize = arr.length;
int gap = 1;
int key;//插入排序中用于比较的key值
while (gap < arraySize / 3) {
gap = gap * 3 + 1; //
System.out.println("gap: "+gap);//get the gap
}
while(gap > 0) {
for (int i = gap; i < arraySize; i++) {//因为被切割成了多个分组,需要对每个分组进行插入排序
/**插入排序开始*/
key = arr[i];//取得第一个数字
//i-gap 意思是前一个元素的序号(例如插入排序的j跟j-1 这里的gap=1)
int j = i - gap;
while ((j >= 0) && (arr[j] > key)){
arr[j + gap] = arr[j];
j -= gap;
}
arr[j + gap] = key;//因为最后的j-=gap 所以需要变成j+gap否则会越界
/**插入排序结束*/
}
gap /= 3;//减小跨度gap,当(gap / 3 < 1)时因为是int 类型会变为0
}
}
public void shellSort2(int[] array){
int gap = 1;
int keyValue = 0;
int arraySize = array.length;
while(gap < arraySize / 3){
gap = gap * 3 + 1;//get gap
}
while(gap > 0){
for(int i=gap; i
keyValue = array[i];
while((j>=0) && (array[j] > keyValue)){
array[j+gap] = array[j];
j -= gap;
}
array[j+gap] = keyValue;
}
gap /= 3;
}
}
public static void main(String[] args){
int[] testArray = {1,3,5,2,2,4,2,3,4,5,6,7};
ShellSort sort = new ShellSort();
sort.shellSort2(testArray);
for (int i = 0; i < testArray.length; i++) {
System.out.print(testArray[i]+" | ");
}
}
}
---------------------
作者:张少飞
来源:CSDN
原文:https://blog.csdn.net/zsf5201314z/article/details/76498475
版权声明:本文为博主原创文章,转载请附上博文链接!