反反复复学习了很多变,但总是忘记,这次一点一点写下来,一定要记住,保持很久很久很久很久很久很久很久很久很久很久很久很久很久很久很久很久很久很久
1.选择排序:
思路:
1.首先拿数组中第一个元素依次与除其自身外的其他每个元素顺序比较,如果第一个元素大于剩下的某个元素,就互换内容
2.经过第一轮的比较之后,此时,第一个元素就是数组中的最小的元素,然后再拿第二个元素与除第一个元素和其自身的元素进行比较,如果第二个元素大于剩下的某个元素,就交换内容。本次循环结束时,第二个元素就是数组中倒数第二小的元素。
3.以此类推,到最后一个元素。
代码:
public class ArrSortTest {
public static void main(String[] args) {
//数组初始化
int[] arr={89,34,-270,17,3,100};
System.out.println("before selectSort:");
printArr(arr);
selectSort(arr);//选择排序
System.out.println("after selectSort:");
printArr(arr); //打印数组
}
public static void selectSort(int[] arr){
for (int i = 0; i < arr.length; i++) {
//使用num记录比较过程中,最小的元素值
//使用index记录比较过程中,最小元素的角标值
int num=arr[i];
int index=i;
for (int j = i+1; j < arr.length; j++) {
//如果有元素更小,更新num值和index值
if(num>arr[j]){
num=arr[j];
index=j;
}
}
//判断index的值是否改变,如果没有改变,则说明该值最小;如果改变,则将起始位与最小的元素交换内容
if(index!=i)
swap(arr,i,index);
}
}
//打印数组的方法
public static void printArr(int[] arr){
System.out.printf("[");
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1)//如果到了最后一个元素,就打印元素值+“】”
System.out.printf(arr[i]+",");
else
System.out.printf(arr[i]+"]");
}
System.out.println();
}
//交换俩个元素值的方法
public static void swap(int[] arr,int i,int index){/*此处有一个问题,希望路过的大神可以帮帮忙,像这样参数名字的定义,要不要这么写,增强阅读性呢,还是参数列表写(int[] arr,int a,int b)就可以,希望有经验的可以给指点下迷津。*/
int temp=arr[i];
arr[i]=arr[index];
arr[index]=temp;
}
}
2.冒泡排序
思路:
1.首先在第一轮排序中,数组从第一个元素到第二个元素依次与其右边的元素进行比较,如果左边的元素大于右边的元素,那么俩个元素就交换。
2.经过第一轮比较,最大的元素就已经存储到数组最右边的结点中了
3.第二轮排序则是从第一个元素到倒数第三个元素依次与其右边的元素进行比较,如果左边的元素大于右边的元素,那么俩个元素就互换
4.依照此方式,一直到只有第一个和第二个元素互相比较而结束
代码:
public class BubbleSortTest {
public static void main(String[] args) {
int[] arr = { 89, 35, -270, 17, 3, 100 };
System.out.println("befor sort");
printSort(arr);
bubbleSort(arr);
System.out.println("after sort");
printSort(arr);
}
public static void printSort(int[] arr) {
System.out.printf("[");
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1)
System.out.printf(arr[i]+",");
else
System.out.printf(arr[i]+"]");
}
System.out.println();
}
public static void bubbleSort(int[] arr) {//还是没办法很清楚的说出,内层循环和外层循环到底控制哪些变量。
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
|
|