👌,begin:
排序算法很重要,它可以使数据按照一定的规律进行排序,各个语言的代码都有自己的排序函数,那么排序到底有哪几种方法,✌,如下:
按照效率分类如上图:
其中用的最多的当属快速排序,我理解的排序思路(🐏),首先我们选定一个基准数,假设选定一个需要排序的十个数据的数组的第一个值。我们定义两个指针,i指向第一个位置,j指向最后一个位置,首先j从后往前走,如果遇到比选定的基准数小的数,停止,i从前向后走,如果遇到大于基准数的数,停止,交换两个位置的数据,然后重复这个过程直到,i和j相遇(或者超过他),最终,交换i位置的数据和基准位置的数据。这样基准位置的左边所有的数都会小于他,右边的数都会大于他,然后对于左右两段,利用同样的方法进行排序。
function quickSort(int left,int right){
定义两个指针,以及基准值
int i,j,temp;
if(left>=right) return;
i=left;
j=right;
temp=nums[i];
while(i!=j){
while(nums[j]>=temp&&i<j){ j--;}
while(nums[i]<=temp&&i<j){ i++;}
swap(nums[i],nums[j]);
}
nums[left]=nums[i];
nums[i]=temp;
quickSort(left,i-1);
quickSort(i+1,right);
冒泡排序,命名来自于这个算法所使用的方法,就类似于水中的气泡咕嘟咕嘟网上冒,
算法的⚪理如下:
从头开始,比较第一个和第二个数据,将大的移到后面(升序的方案,也可以自定义降序排序),然后比较第二个和第三个,一次类推,第一轮将最大移动到最后一位,第二轮将第二大的数据移动到倒数第二位,最终经过n(n-1)(n-2)……的交换,可以得到有序的数组
function(){
for(int i=0;i<nums.size();i++){
for(int j=0;j<nums.size()-i-1;i++){
if(nums[j]>nums[j+1]) swap(nums[i],nums[j]);
}
}
}
当然,如果一直交换就有点蠢,那么进行一次优化,在两个循环之间定义一个标志,如果里面的for循环一次交换都没有发生,我们就可以自然而然的结束这次排序过程;
function(){
for(int i=0;i<nums.size();i++){
bool flag=true;
for(int j=0;j<nums.size()-i-1;i++){
if(nums[j]>nums[j+1]){
swap(nums[i],nums[j]);
flag=false;
}
}
if(flag){break;}
}
}