数组的简单算法 -----学习笔记整理

1.冒泡排序
       原理:比较两个相邻元素,将值大的元素交换至右端
       思路:依次比较数组内相邻元素,将小数放在左边。
             如果数组内有n个元数则比较n-1次     

for(int i=0;i<arr.length-1;i++){//遍历数组元素
         for(int j=0;j<arr.length-i-1;j++){//比较相邻元素的大小,较大的数往后冒泡
          //数组元素交换位置
   if(arr[j]>arr[j-1]){
    int temp =arr[j];//定义临时变量temp 并赋值
    arr[j] =arr[j-1];//把arr[j-i]保存到arr[j]中
    arr[j-i] = temp;//交换位置
}
}
}
showArray(array);// 输出冒泡排序后的数组元素

public void showArray(int[] array) {//定义一个showArray()方法用于输出冒泡数组的元素
        for (int i : array) {// foreach格式遍历数组   for(数据类型 变量名:数组名)
            System.out.print(" >" + i);// 输出每个数组元素值
        }
        System.out.println();
    }


例子:   

  public class BubbleSort {
    public static void main(String[] args) {
        // 创建一个数组,这个数组元素是乱序的
        int[] array = { 63, 4, 24, 1, 3, 15 };


        // 创建冒泡排序类的对象
        BubbleSort sorter = new BubbleSort();


        // 调用排序方法将数组排序
        sorter.sort(array);

             //严格来说类里面不能写语句,语句写在方法里面
    }
    
    /**
     *冒泡排序
     * 
     * @param array
     *            要排序的数组
     */
    public void sort(int[] array) {//创建一个公共的无返回值类型的sort方法

        for (int i = 1; i < array.length; i++) {
            // 比较相邻两个元素,较大的数往后冒泡


            for (int j = 0; j < array.length - i; j++) {
                if (array[j] > array[j + 1]) {
                    int temp = array[j];// 把第一个元素值保持到临时变量中
                    array[j] = array[j + 1];// 把第二个元素值保存到第一个元素单元中
                    array[j + 1] = temp;// 把临时变量也就是第一个元素原值保持到第二个元素中
                }
            }
        }
        showArray(array);// 输出冒泡排序后的数组元素
    }
    
    /**
     * 显示数组所有元素
     * 
     * @param array
     *            要显示的数组
     */
    public void showArray(int[] array) {
        for (int i : array) {// foreach格式遍历数组
            System.out.print(" >" + i);// 输出每个数组元素值
        }
        System.out.println();
    }
}


2.直接排序
    思路:定义一个数(int inmax=0),与数组内元素依次比较,如果这个数比数组内元素大,则数组内元素向左移。如果这个数比数组内元素小,则把这个数组内的元素赋值给定义的与数组内元素比较的数
    

int []arr =  new int[] {1,2,5,88,100,2000,3,4,199,200};
        int maxindex = 0;
        
        for (int i = 1; i<arr.length; i++) {
            maxindex = 0;
            for (int j = 1;j <=arr.length -i; j++) {
                if(arr[maxindex]< arr[j]) {
                    maxindex = j;
                }
                
            }
//  如果定义临时变量进行最大的值跟数组内最末尾的元素进行交换,则不需要判断
//  进行异或交换2个值,如果当前两个值相同,则会出现2个值异或后都为0,所以必须进行判断
//如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
            if(maxindex != arr.length-i) {
                //异或交换值
                arr[maxindex] ^= arr[arr.length-i];
                arr[arr.length-i] ^= arr[maxindex];
                arr[maxindex] ^= arr[arr.length-i];
            }
            
        }
        System.out.println("数组顺序为:");
        for(int tmp:arr)
        {
            System.out.print(tmp+"\t");
        }


3.反转排序
    反转排序就是以相反的顺序把原有的数组内容重新排序
    反转排序的基本思路就是把最后一个元素与第一个元素交换位置,倒数第二个元素与第二个元素交换位置,依次推。直到把所有的元素交换位置
     反转排序不会按升序或者降序排序,反转排序是数组的两边的元素进行替换,所需次数是数组元素的一半。

整理之前的Java学习笔记,看看这三年学了些什么,毕业了,要找工作了感觉啥也没学清楚,顺便重温Java,在向后面学
     

猜你喜欢

转载自blog.csdn.net/RONG_YAO/article/details/89317358