今天打算带竹子回顾一下之前在数据结构里学习的一些算法,平常的一些资料都是写在word里发给竹子看,今天突然想写在博客然后再发给竹子吧。
1,冒泡排序
首先说一下算法的基本思想:从前往后,依次比较相邻的两个数,把较大的数放到后面。一次循环,可以在当前最末尾位置得到一个当前最大值。
这个应该是大家都清楚的一个排序算法了,所以直接贴上代码:
public static void Bubble(int []arrays)
{
int i,j;
for(i=0;i<arrays.lenth-1;i++)
{
for(j=0;j<arrays.lenth-1-i;j++)
{
if(arrays[j]>arrays[j+1])
{
int temp = arrays[j+1];
arrays[j+1] = arrays[j];
arrays[j] = temp;
}
}
}
}
2,选择排序
还是先说一下基本的思想:从数组中找到最小的元素,和第一个位置的元素互换。 从第二个位置开始,找到最小的元素,和第二个位置的元素互换。 直到选出array.length-1个较小元素,剩下的最大的元素自动排在最后一位。
举个例子:
有一个数字{33,45,13,38,79,23}
首先我们找到最小的元素13,然后跟数组的第一个位置的元素做交换:{13,45,33,38,79,23},所以我们现在的数组第一个位置放的就是最小的了
然后找到第二小的元素23,然后跟数组第二个位置的元素做交换:{13,23,33,38,79,45}
然后以此类推…
下面贴代码:
public static void choose(int []arrays)
{
for(int i=0;i<arrays.length-1;i++)
{
int min = i;
for(int j=i;j<arrays.length;j++)
{
if(arrays[min]>arrays[j])
min = j;
}
if(arrays[i]!=arrays[min])
{
int temp = arrays[i];
arrays[i] = arrays[min];
arrays[min] = temp;
}
}
}
}
3,插入排序
还是先说一下基本思想:将一个记录插入到已排好序的序列中,从而得到一个新的有序序列(将序列的第一个数据看成是一个有序的子序列,然后从第二个记录逐个向该有序的子序列进行有序的插入,直至整个序列有序)
这里也举个例子,用网上的一个图片来说:
下图中:
黄色的是已经排好序的序列
绿色的是未排序待插入的序列
橙色的是待插入序列中待插入的元素
下面贴上代码:
public static void insect(int []arrays)
{
int temp;
for (int i=1;i<arrays.length;i++){
if (arrays[i]<arrays[i-1]){
temp = arrays[i];
for (int j=i;j>=0;j--){
if (j>0 && arrays[j-1]>temp) {
arrays[j]=arrays[j-1];
}
else {
arrays[j]=temp;
break;
}
}
}
}
}
}
4,快速排序
感觉这个理解还算好理解,就是代码有一点难写,自己看了几篇我也没自己写出来,放一个链接吧,竹子可以看看
https://blog.csdn.net/MoreWindows/article/details/6684558?utm_source=distribute.pc_relevant.none-task
下面我再给竹子说一下快速排序的基本思想:在待排序数组array[1…n]中任取一个元素key作为基础(通常取首元素),通过一趟排序划分为独立的两部分array[1…k-1]和array[k+1…n],使得array[1…k-1]中的所有元素是小于key的,array[k+1…n]的所有元素大于等于key,然后把key放在最终位置array[k]上,然后递归对左右两个子数组重复上述过程,直到所有元素都排好序为止。
对于第一次趟排序,我给竹子画了个图,看看竹子能不能看清“”
附上算法吧:
public static void Quick(int []array,int low,int high)
{
if(low<high) {
int pivotpos = Partition(array,low,high);
Quick(array,low,pivotpos-1);
Quick(array,pivotpos+1,high);
}
}
public static int Partition(int array[],int low,int high)
{
int pivot = array[low];
while(low<high)
{
while(low<high && array[high]>=pivot) --high;
array[low] = array[high];
while(low<high && array[low]<=pivot) ++low;
array[high] = array[low];
}
array[low] = pivot;
return low;
}