Java中快速排序,冒泡排序和选择排序的实现

一:快速排序的编程思想,写代码前的思考,这种排序方式比冒泡排序的时间复杂度要小很多

分析如下:

5,6,8,7,2,9,1,3,4

i=0
j=8
4,6,8,7,2,9,1,3,5
4,5,8,7,2,9,1,3,6
4,3,8,7,2,9,1,5,6
4,3,5,7,2,9,1,8,6
4,3,1,7,2,9,5,8,6
4,3,1,5,2,9,7,8,6
4,3,1,2,5,9,7,8,6
此时arr1<flag<arr2成立
然后arr1和arr2再次进行上述操作
数组长度为n
设计一个套路,具体一步一步完成它
1、设置两个变量i,j,在排序开始的时候i=0,j=n-1
2、以数组的第一个元素,作为flag,flag=a[0]
3、从j开始向前搜索,j--,找到第一个比flag小的,让a[i]和a[j]交换。
4、从i开始向后搜索,i++,找到第一个比flag大的,让a[i]和a[j]交换。
5、重复3~4的过程,知道i与j相遇为止。

6、把分裂开的arr1和arr2,都重复上述过程,知道全部都只剩1个元素为止。

用JavaScript实现上述:

var arr = new Array(5,6,8,7,2,9,1,3,4);
//排序,array是要被排序的数组,
//start和end是表示对那个数组进行排序
function f(arr,start,end){
//相遇就就结束
if(start==end){
return;
}
var n=start; //将start最原始的标记副歌n
var m=end;  //将end最原始的标记赋值给一个数

//开始排序逻辑
while(start != end){
//从后向前找
for(;start<end;end--){
if(arr[start] > arr[end]){
var temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
break;
}
}
//从前向后找
for(;start<end;start++){
if(arr[start] > arr[end]){
var temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
break;
}
}

}
//进不去while循环,就是start==end,即数组被分成了两个部分,接着这样排序
//两部分为start-n 和  m-end;
if(start - 1>n){
f(arr,n,start-1);
}
if(m-1>end){
f(arr,end+1,m);
}

}
f(arr,0,arr.length-1);

document.write(arr);



下面是用Java代码实现:
package day04;


public class Kssort {


/**
* @param args
*/
public static void main(String[] args) {
int[] arr = {5,6,8,7,2,9,1,3,4};
fun(arr, 0, arr.length-1);
for(int num:arr){
System.out.print(num + " ");
}



}
//start 和 end 是规定的两个标志位
public static int[] fun(int[] arr,int start,int end){
int n=start;
int m = end;
//开始按逻辑走,先从后往前遍历,载再从前往后遍历,start++,和end--,
//知道start==end为止
while(start != end){
for(;start<end;end--){
if(arr[start] > arr[end]){
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
break;
}
}
for(;start<end;start++){
if(arr[start] > arr[end]){
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
break;
}
}
}
//进不去while循环,就说明start==end  此时数组被分为两部分
if(start-1>n){
fun(arr, n, start-1);
}
if(end+1<m){
fun(arr, end+1, m);
}
return arr;
}


}

二、冒泡排序:



int[] arr = {5,6,8,7,2,9,1,3,4};
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {5,6,8,7,2,9,1,3,4};
for(int i=0;i<arr.length-1;i++){
for(int j=0; j< arr.length-1-i;j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] =  arr[j+1];
arr[j+1]  =temp;
}
}
}
for(int num:arr){
System.out.print(num+" ");
}
javascript实现如下:
<script type="text/javascript">
var arr = new Array(5,6,8,7,2,9,1,3,4);
for(var i=0;i<arr.length-1;i++){
for(var j=0; j< arr.length-1-i; j++){
if(arr[j] > arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
document.write(arr)
</script>

三、选择排序:


用Java代码实现:

int[] arr = {5,6,8,7,2,9,1,3,4};
for(int i=0; i< arr.length-1;i++){
for(int j =i+1; j < arr.length; j++){
if(arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for(int num:arr){
System.out.print(num+" ");
}

用JavaScript实现:

<script type="text/javascript">
var arr = new Array(5,6,8,7,2,9,1,3,4);
for(var i=0;i<arr.length-1;i++){
for(var j=i+1; j< arr.length; j++){
if(arr[i] > arr[j]){
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
document.write(arr)
</script>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值