我大一到大三都在学习iOS开发,对于数据结构,计算机网络,计算机操作系统这些基础中的基础实在是有点难以感兴趣,不是说不重要,相反它们都很重要,所以我已经在恶补这方面的知识。
这里我说一下我学习排序算法的一种算法的思路吧:
快速排序:
快排最中心的思想就是找到一个基准数,让其左边的数都小于它,右边的数都大于它,这样一次排序就分成了两组,但不是最终的答案,所以要进行递归左边的组和右边的组分别进行第一次的划分,这样不断递归后生成一组有序的数组。话不多说,上代码:
java:
public static void firstSort(int[] arr){
if(arr.length == 0 || arr == null){
return ;//这里是我的一个习惯,总是先判断数组是不是为空
}else{
quickSort(arr, 0, arr.length-=1)
}
}
public static void quickSort(int[] arr, int left, int right){
if(left<right){
return ;
}
int point = partition(arr, left, right);//找基准数
quickSort(arr, left, point-1);
quickSort(arr, point+1, right);
}
public static void partition(int[] arr,
int left, int right){
int key = arr[left];
int point = left;
while(left<right){
while(left<right && arr[right] >= key){
right--;//如果大于你选定的数,则往前移一位
}
while(left<right && arr[left] <= key){
left--;//如果小于等于你选定的基准数,则往后移一位
}
swap(arr, left, right);//交换大小数
}
swap(arr, point, left);//将基准数移到应该在的位置
}
public static void swap(int[] arr, int i, int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}//交换函数
经过上面的代码进行递归,当left<=right的时候就结束递归,得出排好序的数组。时间复杂度为O(nlogn),对于数据比较多的数组就不适用这个算法,所以还有很多其他算法等着我们去研究。不管你是做什么的,算法一定很重要,记住这一点!!