1.选择排序
分析:
1.比较轮数为数组长度,故i=arr.length。
2.每一轮都是用该轮的第一个数跟其余所有数进行比较,所以比较次数是目前的轮数-1,内村换j=i-1;
3.每一轮比较挑出最小的 ,放在该轮下标的最前面。
代码实现(java代码为例):
package com.imooc.multithreading;
public class PXSFxuanze {
public void selectSort(int[] arr){
for (int i = 0; i < arr.length; i ++){
for (int j = i + 1; j < arr.length; j ++){
if (arr[j] < arr[i]){
int x = arr[j];
arr[j] = arr[i];
arr[i] = x;
}
}
}
}
public static void main(String[] args) {
int[] arr = {522,274,888,182,411,689,544,879,8998,8465,646,6468,4684};
PXSFxuanze pxsFxuanze = new PXSFxuanze();
pxsFxuanze.selectSort(arr);
for (int i =0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
}
}
运行结果:
2插入排序
分析:
1.第一轮不用比较,从第二轮开始比较的所以外层循环从1开始,故i=1,比较的总轮数为数组长度i=arr.length.;
2.分析比较次数,从第二轮开始比较一次,第三轮比较两次,故内存循环j=i,j>0,j递减,这样就刚好比较了i次。
3.每次跟前一个数进行比较,如果比它小,就交换位置
package com.imooc.multithreading;
public class PXSFcharu {
public static void insertSort(int arr[]){
for (int i= 1;i < arr.length;i ++) {
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
int num = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = num;
}else {
break;
}
}
}
}
public static void main(String[] args) {
int[] arr= SuiJiShu.randomNumber(10000,0,100000);
PXSFcharu.insertSort(ar1);
for (int i =0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
}