简单桶排序
输入一组数据并对其进行排序,假设数据是5,3,5,2,8,简单的桶排序是另外创建一个数组,来记录输入数组的每个数出现的次数,最后按照自己新创建的数组对每个数字出现几次,打印几次就行了,如图:
奉上代码:
int[] arrs = new int[6];
Scanner reader = new Scanner(System.in);
System.out.println("请输入数组:");
for(int i = 0 ; i < arrs.length ; i++) {
arrs[i] = reader.nextInt();
}
int[] books = new int[10];
for(int i = 0 ; i < arrs.length ; i++) {
books[arrs[i]] += 1;
}
for(int i = 0 ; i < books.length ; i++) {
for(int j = 0 ; j < books[i] ; j++) {
System.out.print(i + "\t");
}
}
输入:
5 3 5 2 8 2
输出:
2 2 3 5 5 8
注:这个简单桶排序,很浪费空间,如果需要排序的数组中有2000000这个数字,就需要创建一个2000001的长度数组,而且这不是真正的桶排序,但是现在还没学到,以后再说吧
冒泡排序
每次对相邻的两个数字进行比较,如果不是想要的顺序就将他们进行对换
如图:
这只是其中的一次的过程,后面的自行了解
奉上代码:
for(int i = 0 ; i < arrs.length - 1 ; i++) {
for(int j = 1 ; j < arrs.length - i ; j++) {
if(arrs[j -1] > arrs[j]) {//出现顺序不对,交换
int t = arrs[j - 1];
arrs[j - 1] = arrs[j];
arrs[j] = t;
}
}
输入:
5 3 5 2 8 2
输出:
2 2 3 5 5 8
快速排序
输入一组数组,先找一个基数(一般是数组的第一个),然后比如将大于基数的数放在左边,小于基数的数放在右边,然后进行循环操作,就能进行排序
如图:
这是一组进行的,后续的就重复进行即可
奉上代码:
private static void kuaiSu(int left,int right) {
//需要先进行判断左右两边否是正确的数值,不然的话,后面的基数可能会出错
if(left > right)
return;
int temp = arrs[left];//基数
int i = left;int j = right;
while(i != j) {
//先从右边开始(确保最后左边和右边的(left,right)到同一个位置的时候是能满足要求的)
//在这个例子里面,是把大于基数的放在左边,小于基数的放在右边,如果先从左边开始的话就会有可能两个指针相遇的地方是
//左指针停下的地方,然后再进行交换的时候就会出现把小于基数的数换到了左边了
while(arrs[j] <= temp && i < j) {
j--;
}
while(arrs[i] >= temp && i < j) {
i++;
}
if(i < j) {
int t = arrs[i];
arrs[i] = arrs[j];
arrs[j] = t;
}
}
arrs[left] = arrs[i];
arrs[i] = temp;
kuaiSu(0,i - 1);
kuaiSu(i + 1,right);
}
输入:
5 3 5 2 8 2
输出:
8 5 5 3 2 2
这些暂时就是我所学的一些内容,现在属于初学,不足之处,希望指正,万分感谢
内容中的图片均来自于《啊哈,算法》一书中,强推。如有冒犯,我就删了